Manuel PHP
Précédent | Chapitre 18. Les classes et les objets (PHP 5) | Suivant

# Les Itération

PHP 5 fournit une façon pour les objets d'être définis, donc il est possible d'itérer à travers une liste d'éléments, avec, par exemple, une la section intitulée foreach dans Chapitre 15 structure. Par défaut, toutes les propriétés publiques seront utilisées pour cette itération.

Exemple 18-14. Un objet simple itéré

`<?php class MyClass { public $var1 = 'valeur 1'; public $var2 = 'valeur 2'; public $var3 = 'valeur 3'; protected $protected = 'protégé'; private $private = 'privé'; } $class = new MyClass(); foreach($class as $key => $value) { print "$key => $value\n"; }`

L'exemple ci-dessus va afficher :

`var1 => valeur 1 var2 => valeur 2 var3 => valeur 3`

Comme nous le montre l'affichage, la section intitulée foreach dans Chapitre 15 l'itération affiche chaque variable publique définie. Pour aller plus loin, vous pouvez implémenter un des la section intitulée Interfaces itérateurs nommés interne à PHP 5. Celà permet à l'objet de décider quoi et quand l'objet doit être itéré.

Exemple 18-15. Itération d'un objet implémentant un itérateur

`<?php
class MyIterator implements Iterator {
private $var = array();
public function __construct($array) {
if (is_array($array) ) {
$this->var = $array;
}
}
public function rewind() {
echo "rembobinage\n";
reset($this->var);
}
public function current() {
$var = current($this->var);
echo "actuel : $var\n";
return $var;
}
public function key() {
$var = key($this->var);
echo "clé : $var\n";
return $var;
}
public function next() {
$var = next($this->var);
echo "suivant : $var\n";
return $var;
}
public function valid() {
$var = $this->current() !== false;
echo "valide : {$var}\n";
return $var;
}
}
$values = array(1,2,3);
$it = new MyIterator($values);
foreach ($it as $a => $b) {
print "$a: $b\n";
}`

L'exemple ci-dessus va afficher :

`rembobinage actuel : 1 valide : 1 actuel : 1 clé : 0 0: 1 suivant : 2 actuel : 2 valide : 1 actuel : 2 clé : 1 1: 2 suivant : 3 actuel : 3 valide : 1 actuel : 3 clé : 2 2: 3 suivant : actuel : valide :`

Vous pouvez également définir votre classe de façon à ce qu'elle n'a pas besoin de définir toutes les fonctions Iterator en implémentant simplement l'interface PHP 5 IteratorAggregate.

Exemple 18-16. Itération d'un objet implémentant IteratorAggregate

`<?php
class MyCollection implements IteratorAggregate {
private $items = array();
private $count = 0;
/* Définition requise de l'interface IteratorAggregate */
public function getIterator() {
return new MyIterator($this->items);
}
public function add($value) {
$this->items[$this->count++] = $value;
}
}
$coll = new MyCollection();
$coll->add('valeur 1');
$coll->add('valeur 2');
$coll->add('valeur 3');
foreach ($coll as $key => $val) {
echo "clé/valeur : [$key -> $val]\n\n";
}
?>
</pre>`

L'exemple ci-dessus va afficher :

`rembobinage actuel : valeur 1 valide : 1 actuel : valeur 1 clé : 0 clé/valeur : [0 -> valeur 1] suivant : valeur 2 actuel : valeur 2 valide : 1 actuel : valeur 2 clé : 1 clé/valeur : [1 -> valeur 2] suivant : valeur 3 actuel : valeur 3 valide : 1 actuel : valeur 3 clé : 2 clé/valeur : [2 -> valeur 3] suivant : actuel : valide :`

Précédent | Sommaire | Suivant
Surcharge | Niveau supérieur | Méthodes magiques