2e2e2 发表于 2014-4-18 11:26:01

php 预定义接口

Traversable

Traversable {

}


作用:检测一个类是否可以使用 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]
查看完整版本: php 预定义接口