php 预定义接口
TraversableTraversable {
}
作用:检测一个类是否可以使用 foreach 进行遍历的接口。
php代码中不能用。只有内部的PHP类(用C写的类)才可以直接实现Traversable接口
php代码中使用Iterator或IteratorAggregate接口来实现遍历。
这个接口没有任何方法,它的作用仅仅是作为所有可遍历类的基本接口
#检测一个类的对象是否可以用foreach进行遍历,实现Iterator就可遍历了
class man{
}
$p = new man();
var_dump($p instanceofman); #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
*/
页:
[1]