素材牛VIP会员
php迭代器方法执行顺序是怎么确定的
 dg***26  分类:PHP代码  人气:1071  回帖:1  发布于6年前 收藏
<?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()方法会先被调用?

 标签:php

讨论这个帖子(1)垃圾回帖将一律封号处理……

Lv3 码奴
凤***奇 职业无 6年前#1

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

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

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取