我希望迭代对象符合接口,但希望选择如何实现迭代(例如Iterator
或IteratorAggregate
实现)。
我认为这可能会成功:
interface IsTraversable extends Traversable {
// some other stuff here
}
class A implements IsTraversable, IteratorAggregate {
function getIterator() {
return new ArrayIterator(array());
}
}
但它会抛出:
Class A must implement interface Traversable as part of either Iterator or IteratorAggregate
实施IteratorAggregate
时,该消息有点混乱。似乎它试图告诉我,我无法直接实现Traversable
。
是否可以实现我的要求?
答案 0 :(得分:1)
如果您扩展Traversable
,则需要先在实施列表中列出IteratorAggregate
。根据{{3}}:
这是一个内部引擎接口,无法在PHP脚本中实现。必须使用IteratorAggregate或Iterator。 在实现扩展Traversable的接口时,请确保在implements子句中的名称前面列出IteratorAggregate或Iterator。
强调我的。这不会引发错误:
<?php
interface IsTraversable extends Traversable {
// some other stuff here
}
class A implements IteratorAggregate, IsTraversable {
function getIterator() {
return new ArrayIterator(array());
}
}