php迭代器方法执行顺序是怎么确定的
漂亮男人
漂亮男人 2017-06-23 09:12:00
0
1
821
<?php
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);
    }

    public function current() {
        $var = current($this->var);
        echo "current: $var\n";
        return $var;
    }

    public function key() {
        $var = key($this->var);
        echo "key: $var\n";
        return $var;
    }

    public function next() {
        $var = next($this->var);
        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:

但是不理解迭代器内封装方法被调用的顺序 有大神讲解下吗? Iterator类找不到源代码 为什么valid()方法会先被调用?

漂亮男人
漂亮男人

全部回复(1)
学霸

不都是你自己定义的顺序么?
你用了next函数,current函数这些函数去移动了数组的指针

迭代器只是提供一个大家约定好的遍历内部数据集合的格式而已,内部实现(即内部遍历顺序)你可以正序,倒序,随机排序,都可以

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板