- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想了解什么是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/
我正在尝试实现迭代器模式。基本上,据我了解,它创建了一个类“foreachble”,并通过不向用户透露确切的集合类型来使代码更安全。 我已经做了一些实验,我发现如果我实现在我的类(class)中使用
我想了解什么是getIterator(),我会解释一下: 据我所知,getIterator 是我们调用以包含外部迭代器的方法。 问题是 getIterator 包括它自己的方法 关闭认为看起来与 It
我正在尝试使用 PHP 的 IteratorAggregate,但运气不佳。实现 IteratorAggregate 的对象有一个属性 $items,它是一个对象数组 My_Object。 当用户使用
应该是简单的代码。我有 AWS SDK PHP v3,我创建了这样的代码: require 'aws/aws-autoloader.php'; use Aws\S3\S3Client; $s3Clie
我什么都试过了。我是一个完全的初学者。所以非常感谢帮助。 这是我要运行的代码。 import pandas as pd filepath = r'/Users/vignesh/Desktop/Pyth
我有这个 XML 文件:http://dl.dropbox.com/u/10773282/2011/perf.xml 如标记的那样,它有两个 Class 元素。我需要用 C# 获取两个节点。 使用 P
如问题所述,以下之间有什么区别: x.getiterator() 和 x.iter(),其中 x 是 ElementTree 还是 Element?因为它似乎对两者都有效,我已经尝试过了。 如果我哪里
使用 bundle 运行 deno 失败并出现以下错误: error: TS2339 [ERROR]: Property 'getIterator' does not exist on type 'R
这是我的代码。 我刚刚安装了 jupyterlab,并在其中添加了 excel 文件。 如果我将路径更改为文件在我的系统上的位置,则会出现同样的错误。 仅将 excel 文件作为数据框导入时,我似乎找
我是一名优秀的程序员,十分优秀!