foreach 循环中的 PDOStatement php

PDOStatement in foreach loop php

有如下代码:

<?php 

    include 'connection.php'; //$db is declared here. It's a PDO object.

    foreach ($db->query("SELECT * FROM names") as $row) {
        echo $row['firstname'] . $row['lastname'] . $row['postcode'] . '<br>';
    }

?>

代码按预期工作,但我不明白其背后的逻辑。

我在 php.net 上读到 PDO::query() returns 一个 PDOStatement 对象作为结果集。 所以理论上,这部分:$db->query("SELECT * FROM names") 是一个 PDOStatement 对象。

foreach 如何遍历 PDOStatement 对象?它是否将 PDOStatement 对象转换为关联数组?为什么这部分没有:$db->query("SELECT * FROM names") as $row 给出错误?

PDOStatement implements Traversable 接口,这意味着它可以在 foreach 循环中使用。