Treat a PHP class that implements Iterator as an array(将实现 Iterator 的 PHP 类视为数组)
问题描述
如果我有一个实现 Iterator
接口的类,我可以手动控制 foreach
循环中的迭代方式.但是还有其他方法可以让我的对象表现得像一个数组吗?
If I have a class that implements the Iterator
interface, I can manually control how iteration in a foreach
loop. But are there other ways in which I could make my object behave like an array?
例如,假设我有一个实现 Iterator
的类 Guestbook
,这样我就可以迭代 foreach (new Guestbook() as $entry).但是,如果我想颠倒顺序怎么办?
For instance, let's say I have a class Guestbook
which implements Iterator
, so that I can iterate foreach (new Guestbook() as $entry)
. But what if I want to, say, reverse the order?
foreach (array_reverse(new Guestbook()) as $entry)
肯定不行,因为 array_reverse
只接受一个数组.
foreach (array_reverse(new Guestbook()) as $entry)
definitely won't work, because array_reverse
will only accept an array.
我想我想问的是,我可以将 Iterator
用于更多的 foreach
循环吗?
I guess what I'm asking is, can I use Iterator
for more than just foreach
loops?
谢谢.
推荐答案
迭代器接口的目的 是为了让你的对象在 foreach 循环中使用,它不是为了让你的对象像一个数组.如果您想要一些像数组一样的东西,请使用数组.
The purpose of the Iterator interface is to allow your object to be used in a foreach loop, it is not intended to make your object act like an array. If you want something that acts like an array, use an array.
您始终可以使用iterator_to_array 函数将您的对象转换为数组,但您无法逆转该过程.
You can always turn your object into an array by using the iterator_to_array function, but you can't reverse that process.
如果您认为需要反转可迭代对象中元素的顺序,那么您可以创建一个 reverse() 方法,该方法可能在内部使用 array_reverse().像这样:-
If you see the need for reversing the order of the elements in your iterable object, then you could create a reverse() method that, possibly, uses array_reverse() internally. Something like this:-
输出:-
我写了代码是为了在发布之前向自己证明它可以工作,并认为我不妨把它扔到答案中.
I wrote the code to prove to myself that it would work before posting and thought I might as well throw it into the answer.
这篇关于将实现 Iterator 的 PHP 类视为数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!