Utiliser l'interface Iterator avec PHP 5
- Par Palleas
- 0 commentaire
- 274 lectures
- Format PDF
- RSS - Atom
PHP 5 a apporté son lot de nouveautés en matière de programmation orientée objet, notamment la possibilité d'utiliser des Interfaces. Iterator en est une et nous allons voir comment l'utiliser grâce à ce tutoriel. La structure conditionnelle " foreach " vous permettait jusqu'à lors de parcourir le contenu d'un tableau. Avec la version 5 de PHP, vous pouvez désormais parcourir tout un objet pour récupérer ses propriétés.
Rappel sur les Interfaces
Une interface est une manière de passer un contrat avec une classe, afin de s'assurer que celle-ci disposera bien de certaines méthodes/propriétés. Contrairement à l'héritage, il est possible d'implémenter plusieurs interfaces[1], ce qui permet de pallier à l'impossibilité d'utiliser l'héritage multiple en PHP.
L'interface Iterator
L'interface native Iterator existe depuis déjà quelques temps en java et apporte un atout non négligeable en matière de programmation orientée objet. Voici ce à quoi ressemble le code de l'interface Iterator :
<?phpInterface Iterator {public function valid();}?>
Parcourir un objet avec l'instruction foreach()
<?phpclass MaClasse {protected $arg1 = 'plop' ;protected $arg2 = 'plip';//...}$c = new MaClasse();foreach($c as $key=>$value) {}?>
Ce qui affichera :
arg1 : ploparg2 : plip
C'est là qu'intervient l'interface Iterator. Elle va en effet vous permettre de personnaliser le comportement de foreach. Implémenter cette interface dans votre classe vous oblige de surcharger (ou redéfinir) les 5 methodes suivantes : rewind(), next(), key(), current() et valid().
<?phpclass MaClasse implements Iterator {protected $n;const MAX = 5;$this->n = 0;}$this->n++;}return 'increment '.$this->n+1;}return $this->n;}public function valid() {}}$c = new MaClasse();foreach($c as $key => $val) {}?>
Ce qui affichera :
increment 1 : 0increment 2 : 1increment 3 : 2increment 4 : 3increment 5 : 4
Ces méthodes seront appelées par foreach, dans cet ordre :
- rewind lors de la première iteration, qui vous permet de rembobiner votre objet (ici on remet $n à 0)
- valid qui vérifie que l'on n'est pas arrivé à la fin de notre itération (ici que $n est inferieur au nombre maximum d'itération fixé par la constante MAX). Si valid retourne TRUE, on poursuit sinon on s'arrête, c'est la fin de l'itération.
- current qui retourne la valeur de l'itération courante (ici $n)
- key qui retourne la clé de l'itération courante (ici key.$n )
- next qui lance l'itération suivante (ici, on incrémente $n de 1)
- Est en suite rappelée la méthode valid() qui vérifie une nouvelle fois que l'on n'est pas arrivé aux termes de l'Itération.
Note [1] : Une classe ne peut cependant pas implémenter deux interfaces partageant des noms de fonctions.
En savoir plus sur l'interface Iterator
Les commentaires
Soyez le premier à réagir !
