Parcours d'objets

PHP fournit une façon de définir les objets de manière à ce qu'on puisse parcourir une liste de membres, par exemple avec une structure foreach. Par défaut, toutes les propriétés visibles seront utilisées pour le parcours.

Exemple #1 Parcours d'objet simple

  1. <?php
  2. class MyClass
  3. {
  4. public $var1 = 'valeur 1';
  5. public $var2 = 'valeur 2';
  6. public $var3 = 'valeur 3';
  7.  
  8. protected $protected = 'variable protégée';
  9. private $private = 'variable privée';
  10.  
  11. function iterateVisible() {
  12. echo "MyClass::iterateVisible:\n";
  13. foreach($this as $key => $value) {
  14. print "$key => $value\n";
  15. }
  16. }
  17. }
  18.  
  19. $class = new MyClass();
  20.  
  21. foreach($class as $key => $value) {
  22. print "$key => $value\n";
  23. }
  24. echo "\n";
  25.  
  26.  
  27. $class->iterateVisible();
  1. <?php
  2. class MyIterator implements Iterator
  3. {
  4. private $var = array();
  5.  
  6. public function __construct($array)
  7. {
  8. if (is_array($array)) {
  9. $this->var = $array;
  10. }
  11. }
  12.  
  13. public function rewind()
  14. {
  15. echo "rembobinage\n";
  16. reset($this->var);
  17. }
  18.  
  19. public function current()
  20. {
  21. $var = current($this->var);
  22. echo "actuel : $var\n";
  23. return $var;
  24. }
  25.  
  26. public function key()
  27. {
  28. $var = key($this->var);
  29. echo "clé : $var\n";
  30. return $var;
  31. }
  32.  
  33. public function next()
  34. {
  35. $var = next($this->var);
  36. echo "suivant : $var\n";
  37. return $var;
  38. }
  39.  
  40. public function valid()
  41. {
  42. $key = key($this->var);
  43. $var = ($key !== NULL && $key !== FALSE);
  44. echo "valide : $var\n";
  45. return $var;
  46. }
  47.  
  48. }
  49.  
  50. $values = array(1,2,3);
  51. $it = new MyIterator($values);
  52.  
  53. foreach ($it as $a => $b) {
  54. print "$a : $b\n";
  55. }
  56. ?>
  1. <?php
  2. class MyCollection implements IteratorAggregate
  3. {
  4. private $items = array();
  5. private $count = 0;
  6.  
  7. // Définition requise de l'interface IteratorAggregate
  8. public function getIterator() {
  9. return new MyIterator($this->items);
  10. }
  11.  
  12. public function add($value) {
  13. $this->items[$this->count++] = $value;
  14. }
  15. }
  16.  
  17. $coll = new MyCollection();
  18. $coll->add('valeur 1');
  19. $coll->add('valeur 2');
  20. $coll->add('valeur 3');
  21.  
  22. foreach ($coll as $key => $val) {
  23. echo "clé/valeur : [$key -> $val]\n\n";
  24. }
  25. ?>

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 :

Note:

Pour plus d'exemples sur le parcours d'objets, lisez la section sur l'extension SPL.

Note:

Les utilisateurs de PHP 5.5 et inférieures peuvent également vouloir utiliser les générateurs, qui fournissent une alternative aux itérateurs.

LoadingChargement en cours