Wie wird die Ausführungsreihenfolge von PHP-Iteratormethoden bestimmt?
漂亮男人
漂亮男人 2017-06-23 09:12:00
0
1
820
<?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";
}
?>

Die obige Routine gibt Folgendes aus:

Zurückspulen
Aktuell: 1
Gültig: 1
Aktuell: 1
Taste: 0
0: 1
Weiter: 2
Aktuell: 2
Gültig: 1
Aktuell: 2
Taste: 1
1: 2
Weiter: 3
aktuell: 3
gültig: 1
aktuell: 3
Schlüssel: 2
2: 3
nächster:
aktuell:
gültig:

Aber ich verstehe die Reihenfolge, in der die gekapselten Methoden im Iterator aufgerufen werden, nicht. Kann es jemand erklären? Der Quellcode der Iterator-Klasse kann nicht gefunden werden. Warum wird zuerst die valid()-Methode aufgerufen?

漂亮男人
漂亮男人

Antworte allen(1)
学霸

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

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage