gpt4 book ai didi

php - ArrayObject, getIterator();

转载 作者:可可西里 更新时间:2023-11-01 13:41:46 24 4
gpt4 key购买 nike

我想了解什么是getIterator(),我会解释一下:

据我所知,getIterator 是我们调用以包含外部迭代器的方法。

问题是 getIterator 包括它自己的方法 关闭认为看起来与 Iterator 接口(interface)相同,但它不能是接口(interface),它可以是类,但我试图在 SPL 中搜索它。 php 源代码并没有找到任何,也许我使它比实际情况更复杂,如果有人可以帮助我了解它在 SPL.php 源代码中的位置以及它是什么(类,ETC)。谢谢大家,祝你有美好的一天。

最佳答案

ArrayObject 实现了 IteratorAggregate,它允许您返回一个迭代器而不是实现它。这很简单。假设您有一个包装数组的类,例如

class Foo
{
private $array = [1,2,3,4];
}

并且您想要foreach Foo 实例,如下所示:

foreach (new Foo as $bar) {
echo $bar; // outputs 1234
}

要实现这一点,您可以添加 Iterator 接口(interface),但随后您必须实现接口(interface)中的所有方法,才能完成在对象内迭代数组的简单任务。您不想在需要该功能时一遍又一遍地复制该代码,尤其是因为已经有一个 Iterator 可以执行您想要的操作。因此,不是实现 Iterator,而是实现 IteratorAggregate

class Foo implements IteratorAggregate
{
private $array = [1,2,3,4];

public function getIterator()
{
return new ArrayIterator($this->array);
}
}

现在,当您执行 foreach 时,PHP 将使用从 getIterator 返回的 Iterator 而不是 Foo 实例本身,从而允许您获取输出1234.

对于ArrayObject,关键是允许您foreach ArrayObject 中的值。当然你也可以自己调用getIterator,因为它是public的,然后直接使用返回的Iterator。

还要注意 ArrayObject 的构造函数签名:

public __construct (
[ mixed $input
[, int $flags = 0
[, string $iterator_class = "ArrayIterator"
]]] )

which notes which Iterator will return.

关于php - ArrayObject, getIterator();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11373318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com