是否可以实现扩展Traversable的接口?

时间:2017-09-10 14:40:55

标签: php iterator

我希望迭代对象符合接口,但希望选择如何实现迭代(例如IteratorIteratorAggregate实现)。

我认为这可能会成功:

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

是否可以实现我的要求?

1 个答案:

答案 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());
    }
}