ArrayObject
实施IteratorAggregate
它允许您返回一个迭代器而不是实现它。这非常简单。假设您有一个包装数组的类,例如
class Foo
{
private $array = [1,2,3,4];
}
你想要foreach
在一个实例上Foo
, 像这样:
foreach (new Foo as $bar) {
echo $bar; // outputs 1234
}
为了实现这一点,您可以添加Iterator
接口,但随后您必须实现接口中的所有方法来完成迭代对象内的数组的简单任务。每当您需要该功能时,您都不希望一遍又一遍地重复该代码,尤其是因为已经有一个迭代器可以执行您想要的操作。所以而不是实施Iterator
你实施IteratorAggregate
class Foo implements IteratorAggregate
{
private $array = [1,2,3,4];
public function getIterator()
{
return new ArrayIterator($this->array);
}
}
现在当你做foreach
PHP 将使用从返回的迭代器getIterator
而不是Foo
实例本身允许您获得输出 1234。
的情况下ArrayObject
,重点只是为了让您能够foreach
超过中的值ArrayObject
。当然,您也可以致电getIterator
你自己,因为它是公共的,然后直接使用返回的迭代器。
另请注意 ctor 签名ArrayObject
:
public __construct (
[ mixed $input
[, int $flags = 0
[, string $iterator_class = "ArrayIterator"
]]] )
它记录了将返回哪个迭代器。