recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment l'ordre d'exécution des méthodes de l'itérateur PHP est-il déterminé ?

<?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";
}
?>

La routine ci-dessus affichera :

rembobinage
actuel: 1
valide: 1
actuel: 1
clé: 0
0: 1
suivant: 2
actuel: 2
valide: 1
actuel: 2
clé: 1
1: 2
suivant: 3
actuel : 3
valide : 1
actuel : 3
clé : 2
2 : 3
suivant :
actuel :
valide :

Mais je ne comprends pas l'ordre dans lequel les méthodes encapsulées dans l'itérateur sont appelées. Quelqu'un peut-il l'expliquer ? Le code source de la classe Iterator est introuvable. Pourquoi la méthode valid() est-elle appelée en premier ?

漂亮男人漂亮男人2802 Il y a quelques jours841

répondre à tous(1)je répondrai

  • 欧阳克

    欧阳克2017-06-23 09:14:00

    N'est-ce pas l'ordre que vous avez défini vous-même ?
    Vous avez utilisé la fonction suivante et la fonction actuelle pour déplacer le pointeur du tableau

    L'itérateur fournit simplement un format convenu pour parcourir la collecte de données interne. Pour l'implémentation interne (c'est-à-dire l'ordre de parcours interne), vous pouvez le trier dans l'ordre direct, l'ordre inverse ou l'ordre aléatoire, etc.

    répondre
    0
  • Annulerrépondre