PDOStatement是怎樣被Foreach直接遍歷的?
高洛峰
高洛峰 2016-10-24 10:42:39
[PHP讨论组]

在學習Pdo的過程中發現一個問題,PDOStatement可以直接Foreach輸出查詢結果,如下:

foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
}

將其var_dump出來是這個樣子:

object(PDOStatement)#2 (1) {
 ["queryString"]=>  string(25) "select * from studentinfo"}

在網路上找到一個類可以實現Iterator接口來讓Foreach可以遍歷,但這樣的確可以,但透過var_dump輸出的明顯跟PDOStatement不同:

object(Owi)#1 (2) {
  ["data":"Owi":private]=>  array(3) {
    [0]=>
    string(5) "apple"
    [1]=>
    string(9) "microsoft"
    [2]=>
    string(5) "nokia"
  }
  ["pointer":"Owi":private]=>
  int(0)
}

然後我翻看了官方手冊中PDOStatement的描述,發現其實現了Traversable接口,但手冊中描述這是一個空的接口。於是我透過

var_dump($owi instanceof Traversable);

來檢查我這個類(實現Iterator接口)是否是Traversable的派生類,結果是 True

但我嘗試直接

implements Traversable

的時候會報錯,告知我必須使用Iterator來實現。
那麼,我現在就一頭霧水了,PDOStatement究竟是如何實現Foreach迭代的呢?
還望各位朋友指教!


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号