POO #10: Utiliser l'interface Iterator avec PHP 5

Publié le par Latyr Ndiaye

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 :

Parcourir un objet avec l'instruction foreach()

Ce qui affichera :

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().

Ce qui affichera :

Ces méthodes seront appelées par foreach, dans cet ordre :

  1. rewind lors de la première iteration, qui vous permet de rembobiner votre objet (ici on remet $n à 0)
  2. 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.
  3. current qui retourne la valeur de l'itération courante (ici $n)
  4. key qui retourne la clé de l'itération courante (ici key.$n )
  5. next qui lance l'itération suivante (ici, on incrémente $n de 1)
  6. 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.

 

NB: Je rend grâce un vibrant hômmage au propriétairedu site https://apprendre-php.com/tutoriels.html, un site qui ma permis moi même d'apprendre les bases de PHP et le PHP Objet. Aujourd'hui je parviens à former pas mal d'étudiants raison pour laquelle je me dis pas meilleur que se site pour faire des tutos.

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article