php - 是否可以实现一个扩展 Traversable 的接口(interface)?

标签 php iterator

我希望拥有符合接口(interface)的可迭代对象,但希望将如何实现可迭代性的选择(例如实现 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

可以实现我的要求吗?

最佳答案

如果扩展Traversable,则需要在实现列表中首先列出IteratorAggregate。根据 PHP manual :

This is an internal engine interface which cannot be implemented in PHP scripts. Either IteratorAggregate or Iterator must be used instead. When implementing an interface which extends Traversable, make sure to list IteratorAggregate or Iterator before its name in the implements clause.

强调我的。这不会引发错误:

<?php
interface IsTraversable extends Traversable {
    // some other stuff here
}

class A implements IteratorAggregate, IsTraversable {
    function getIterator() {
        return new ArrayIterator(array());
    }
}

关于php - 是否可以实现一个扩展 Traversable 的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46141903/

相关文章:

php - zf2 没有使用 PHP 5 "DateTime"类

php - 如何设置 SeoBundle 和提取标题?

Javascript 函数根据选择选项的值选中一个框

python - list(y) 行为在第一次调用时是 "wrong"

PHP 如何先按键然后按值对关联数组进行排序?

php - 无法使用 PHP 套接字发送 XML 数据

java - 与实现Iterable相关的对象类型有哪些

java - 另一个循环内的迭代循环

java - Java中元素迭代器的并行计算

c++ - 基于范围的循环:对扩展了一个元素的 vector 进行迭代