How is the execution order of php iterator methods determined?
漂亮男人
漂亮男人 2017-06-23 09:12:00
0
1
816
<?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";
}
?>

The above routine will output:

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:

But I don’t understand the order in which the encapsulated methods in the iterator are called. Can anyone explain it? The source code of the Iterator class cannot be found. Why is the valid() method called first?

漂亮男人
漂亮男人

reply all(1)
学霸

Isn’t it the order you defined yourself?
You used the next function and current function to move the pointer of the array

The iterator just provides an agreed-upon format for traversing the internal data collection. For the internal implementation (i.e., the internal traversal order), you can sort it in forward order, reverse order, or random order, etc.

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template