【发布时间】:2012-06-20 12:39:22
【问题描述】:
我今天偶然发现了这个PHP: Iterators 页面,我想知道为什么甚至需要这些课程。我想假设它们是有目的的,否则它们就不会出现在 PHP 中。当已经有非常简单的方法可以做到这些时,我很难看到这些项目的好处。
PHP 在成为一种更受人尊敬/面向对象的编程语言方面是否犯了错误?或者这样做真的有好处吗?
在PHP comment on the ArrayIterator 中找到了一个很好的例子,说明有两种方法可以做到这一点:
<?php
$fruits = array(
"apple" => "yummy",
"orange" => "ah ya, nice",
"grape" => "wow, I love it!",
"plum" => "nah, not me"
);
$obj = new ArrayObject( $fruits );
$it = $obj->getIterator();
// How many items are we iterating over?
echo "Iterating over: " . $obj->count() . " values\n";
// Iterate over the values in the ArrayObject:
while( $it->valid() ) {
echo $it->key() . "=" . $it->current() . "\n";
$it->next();
}
// The good thing here is that it can be iterated with foreach loop
foreach ($it as $key=>$val)
echo $key.":".$val."\n";
/* Outputs something like */
Iterating over: 4 values
apple=yummy
orange=ah ya, nice
grape=wow, I love it!
plum=nah, not me
?>
【问题讨论】:
-
为什么他们应该不存在?数组(在 PHP 的意义上)非常有限。只需查看现有的迭代器。具体的描述了一些常见的用例(例如递归的)。
-
也许this thread 中的解释有点帮助,尽管这是关于 java 的