Dans cet article, nous allons voir la notion des itérateurs « Iterators » en PHP. Tout d’abord c’est quoi un itérateur ??
Un Itérateur rassemble à un pointeur disposant essentiellement de deux primitives : accéder à l’élément pointé en cours (dans le conteneur), et se déplacer pour pointer vers l’élément suivant.
Le but d’un itérateur est de permettre à son utilisateur de parcourir le conteneur, c’est à dire d’accéder séquentiellement à tous ses éléments pour leur appliquer un traitement. Le conteneur peut stocker les éléments de la façon qu’il veut, tout en permettant à l’utilisateur de le traiter comme une simple liste.
PHP 5 donne la possibilité d’utiliser des interfaces. Iterator est une de ces interfaces.
L’interface Iterator apporte un atout non négligeable en matière orientée objet. Voici le code d’une interface Iterator
<?php Interface Iterator { public function rewind(); public function key(); public function current(); public function next(); public function valid(); } ?>
L’interface Iterator va nous permettre de personnaliser le comportement de foreach. Implémenter cette interface dans une class vous oblige de redéfinir les 5 méthodes suivants: rewind(), key(), current() et valid()
Voici un petit exemple pour bien comprendre
<?php
class MyIterator implements Iterator { private $position = 0; private $tableau = array('JAVA', 'PHP', 'C++', 'C', 'C#', 'JAVASCRIPT', 'PYTHON'); public function __construct() { $this->position = 0; } public function rewind() { $this->position = 0; } public function current() { return $this->tableau[$this->position]; } public function key() { return $this->position; } public function next() { $this->position++; } public function valid() { return isset($this->tableau[$this->position]); } } $it = new MyIterator(); while($it->valid()) { echo $it->key(); echo ' => '; echo $it->current(); echo ''; $it->next(); }
Voici le résultat :
La méthode rewind() : positionne le curseur au premier élément.
La méthode current() : retourne l’élément courant.
La méthode key(): retourne le ket de l’élément courant.
La méthode next(): se déplace sur l’élément suivant
La méthode valid(): Vérifier si la position courante est valide