Utiliser l'interface Iterator avec PHP 5 - Apprendre-PHP.com

Rechercher
Boutique en ligne, solution e-commerce, script PHP et PERL : RAYNETTE

Utiliser l'interface Iterator avec PHP 5

Utiliser l'interface Iterator avec PHP 5

 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 :

<?php
Interface Iterator {
public function rewind();
public function key();
public function current();
public function next();
public function valid();
}
?>

Parcourir un objet avec l'instruction foreach()

<?php
class MaClasse {
protected $arg1 = 'plop' ;
protected $arg2 = 'plip';
//...
}
$c = new MaClasse();
foreach($c as $key=>$value) {
echo $key, ' : ', $value, '<br/>';
}
?>

Ce qui affichera :

arg1 : plop
arg2 : 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().

<?php
class MaClasse implements Iterator {
protected $n;
const MAX = 5;
public function rewind() {
$this->n = 0;
}
public function next() {
$this->n++;
}
public function key() {
return 'increment '.$this->n+1;
}
public function current() {
return $this->n;
}
public function valid() {
return $this->n<=self::MAX;
}
}
$c = new MaClasse();
foreach($c as $key => $val) {
echo $key,' : ',$val, '<br/>';
}
?>

Ce qui affichera :

increment 1 : 0
increment 2 : 1
increment 3 : 2
increment 4 : 3
increment 5 : 4

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.

En savoir plus sur l'interface Iterator



Les commentaires

Soyez le premier à réagir !

Ajouter un commentaire

Votre avis
Se souvenir de mes informations