php 迭代作为可遍历的特性

hc8w905p  于 2023-01-19  发布在  PHP
关注(0)|答案(2)|浏览(131)

我想用我的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

这有可能吗?以什么方式?

4c8rllxm

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

tktrz96b

tktrz96b2#

我相信你必须实现迭代器或迭代器聚合,例如:

<?php
trait Iterative
{
    public function rewind(){ /* ... */ }
    public function current(){ /* ... */ }
    public function key(){ /* ... */  }
    public function next(){ /* ... */ }
    public function valid(){ /* ... */ }
}

# Class BasicIterator should implements the interface using trait

class BasicIterator implements \Iterator {
    use Iterative;
}
?>

参见http://3v4l.org/G7KiF

相关问题