为什么PHP有迭代器对象?

Web*_*net 1 php iterator

我偶然发现了这个PHP:Iterators页面,我想知道为什么甚至需要这些类.我想假设它们有用,否则它们不会用PHP.当我们已经采用非常简单的方法时,我很难看到这些物品的好处.

PHP是一个错误,是一个更可敬的/面向对象的编程语言?或者这样做真的有好处吗?

在ArrayIteratorPHP注释中找到了一个很好的例子:有两种方法可以做到这一点:

<?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

?>
Run Code Online (Sandbox Code Playgroud)

Joe*_* C. 5

迭代器包含在PHP中,因为它允许您使用具有任意对象的公共语言结构(例如foreach),而不是仅限于循环内置对象(如数组).强迫对象将其内部状态转换为数组以供您迭代,这是一个麻烦(并打破封装),对于大型数据集可能会使您的系统内存不足.迭代允许您通过让对象本身仅在请求时返回单个元素来解决这两个问题.