PHP内置接口Iterator

PHP的内置接口Iterator了,PHP5开始支持了接口, 并且内置了Iterator接口, 所以如果你定义了一个类,并实现了Iterator接口,那么你的这个类对象就是ZEND_ITER_OBJECT,否则就是ZEND_ITER_PLAIN_OBJECT.

对于ZEND_ITER_PLAIN_OBJECT的类,foreach会通过HASH_OF获取该对象的默认属性数组,然后对该数组进行foreach.
而对于ZEND_ITER_OBJECT的类对象,则会通过调用对象实现的Iterator接口相关函数来进行foreach, 所以, 对于这道笔试题, 可以作出如下的答案:

    1. class sample implements Iterator
    2. {
    3.     private $_items = array(1,2,3,4,5,6,7);
    4.  
    5.     public function __construct() {
    6.                   ;//void
    7.     }
    8.     public function rewind() { reset($this->_items); }
    9.     public function current() { return current($this->_items); }
    10.     public function key() { return key($this->_items); }
    11.     public function next() { return next($this->_items); }
    12.     public function valid() { return ( $this->current() !== false ); }
    13. }
    14.  
    15. $sa = new sample();
    16. foreach($sa as $key => $val){
    17.     print $key . "=>" .$val;
    18. }
posted @ 2015-05-26 18:01  donizzh  阅读(260)  评论(0编辑  收藏  举报