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

<?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();
<?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()
	{
		$key = key($this->var);
		$var = ($key !== NULL && $key !== 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";
}
?>
<?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.

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