C语言 c++ php mysql nginx linux lnmp lamp lanmp memcache redis 面试 笔记 ppt 设计模式 问题 远程连接

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

 

posted on 2014-04-17 15:18  思齐_  阅读(2037)  评论(0编辑  收藏  举报