我想用我的trait iterative创建PHP的迭代器,我试着这样做:
1.特征迭代“实现”接口可遍历
trait Iterative
{
public function rewind(){ /* ... */ }
public function current(){ /* ... */ }
public function key(){ /* ... */ }
public function next(){ /* ... */ }
public function valid(){ /* ... */ }
}
1.类BasicIterator应使用trait实现接口
class BasicIterator implements \Traversable {
use Iterative;
}
但我得到:
Fatal error: Class BasicIterator must implement interface Traversable as part of either Iterator or IteratorAggregate in Unknown on line 0
这有可能吗?以什么方式?
2条答案
按热度按时间4c8rllxm1#
问题不在于使用了Traits,而在于你实现了错误的接口。请参阅the manual page for Traversable上的注解:
这是一个内部引擎接口,不能在PHP脚本中实现。必须使用IteratorAggregate或Iterator。
改为
class BasicIterator implements \Iterator
,因为that is the interface whose methods you have included in your Trait。tktrz96b2#
我相信你必须实现迭代器或迭代器聚合,例如:
参见http://3v4l.org/G7KiF