<?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 ?
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.