PHP et L’interface Iterator

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 :

iterator

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