Manuel PHP

Table des matières

Préface
I. Au moment de commencer
II. Installation et configuration
III. Référence du langage
IV. Sécurité
V. Caractéristiques
VI. Référence des fonctions
VII. PHP et le moteur interne Zend
VIII. FAQ : foire Aux Questions
IX. Annexes
Remerciements



Parcours d'objets

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

Exemple 19-22. Parcours d’objet simple

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

L’exemple ci-dessus va afficher :

var1 ⇒ valeur 1 var2 ⇒ valeur 2 var3 ⇒ valeur 3

MyClass::iterateVisible: var1 ⇒ valeur 1 var2 ⇒ valeur 2 var3 ⇒ valeur 3 protected ⇒ variable protégée private ⇒ variable privée

Comme nous le montre l’affichage, l’itération foreach affiche toutes les variables visibles disponibles. Pour aller plus loin, vous pouvez implémenter l’interface interne de PHP 5 nommée “Iterator”. Ceci permet de déterminer comment l’objet doit être parcouru.

Exemple 19-23. 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’ait pas besoin de définir toutes les fonctions “Iterator” en implémentant simplement l’interface PHP 5 “IteratorAggregate”.

Exemple 19-24. 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";
}
?>

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.

Travail collaboratif

Contribuez, en ajjoutant des elements a cette page de manuel :

Merci de votre aide
L’equipe Php.fr

 


Index | Afficher le texte source | Anciennes révisions | Derniers changements | Connexion
©2007 Wiki Copyright