php 5 Iterator 内部接口

    class MyIterator implements Iterator
    {
        private $var = array();
        public function __construct($array){
            if(is_array($array)){
                $this->var = $array;
            }
        }

        public function rewind(){
            echo "rewinding/n";
            reset($this->var);      #reset() 将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值。
        }

        public function current(){
            $var = current($this->var);
/*
每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个单元。
current()函数返回当前被内部指针指向的数组单元的值,并不移动指针。
如果内部指针指向超出了单元列表的末端,curret() 返回 FALSE。
*/
            echo "current: $var/n";
            return $var;
        }

        public function key(){
            $var = key($this->var);
/*
mixed key ( array array)
key() 返回数组中当前单元的键名。
*/
            echo "key: $var/n";
            return $var;
        }

        public function next(){
            $var = next($this->var);
/*
mixed next ( array array)
返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回 FALSE。
next()和current()的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。
这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位。
如果移动指针的结果是超出了数组单元的末端,则 next() 返回 FALSE。
*/
            echo "next: $var/n";
            return $var;
        }

        public function valid(){
            $var = $this->current() !== false;
            echo "valid: {$var}/n";
            return $var;
        }
    }

    $values = array(1, 2, 3);
    $it = new MyIterator($values);
    foreach($it as $a => $b){
        print "$a => $b/n";
    }
?>
/*    输出结果如下
rewinding
current: 1
valid: 1
current: 1
key: 0
0 => 1
next: 2
current: 2
valid: 1
current: 2
key: 1
1 => 2
next: 3
current: 3
valid: 1
current: 3
key: 2
2 => 3
next:
current:
valid:

foreach语句遍历Iterator接口的过程如下:
循环之前rewind()方法使迭代器指针指向第一个元素,随后调用valid()方法
在valid()方法调用中current()方法先被调用。接着foreach语句自动调用,
current(),key(), next()
当valid()返回FALSE的时候迭代结束
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值