php 预定义接口
Traversable
Traversable {
}
作用:检测一个类是否可以使用 foreach 进行遍历的接口。
php代码中不能用。只有内部的PHP类(用C写的类)才可以直接实现Traversable接口
php代码中使用Iterator或IteratorAggregate接口来实现遍历。
这个接口没有任何方法,它的作用仅仅是作为所有可遍历类的基本接口
#检测一个类的对象是否可以用foreach进行遍历,实现Iterator就可遍历了 class man{ } $p = new man(); var_dump($p instanceof man); #false
if( !is_array( $items ) && !$items instanceof Traversable ) //Throw exception here
Iterator
实现该接口的对象可以迭代自己内部的数据
Iterator extends Traversable { //返回当前索引游标指向的元素 abstract public mixed current(void) //返回当前索引游标指向的元素的键名 abstract public scalar key(void) //移动当前索引游标指向下一元素 abstract public void next(void) //重置索引游标的指向第一个元素 abstract public void rewind(void) //判断当前索引游标指向的是否是一个元素,常常在调用 rewind()或 next()使用 abstract public boolean valid(void) }
class myIterator implements Iterator { private $position = 0; private $array = array( "firstelement", "secondelement", "lastelement", ); public function __construct() { $this->position = 0; } function rewind() { // var_dump(__METHOD__); $this->position = 0; } function current() { // var_dump(__METHOD__); return $this->array[$this->position]; } function key() { // var_dump(__METHOD__); return $this->position; } function next() { // var_dump(__METHOD__); ++$this->position; } function valid() { // var_dump(__METHOD__); return isset($this->array[$this->position]); } } $it = new myIterator; foreach($it as $key => $value) { echo "{$key}|{$value}"; echo "\n"; } /** 0|firstelement 1|secondelement 2|lastelement */
http://www.nowamagic.net/librarys/veda/detail/2167
http://www.php.net/manual/zh/reserved.interfaces.php