Page 1 sur 1

IteratorAggregate , rien ne s'affiche.

Posté : 10 sept. 2007, 21:12
par Shadockou
Bonjour j'ai un problème avec le code suivant , issue du chapitre sur la POO de PHP5 avancé :
<?php
class groupeCouleurs implements IteratorAggregate{
	public $couleurs = array();
	function ajouteCouleur($couleur){
		$this->couleurs[]=$couleur;
	}
	function getIterator(){
		$iterator = new GroupeCouleursIterator($this->couleurs);
		return $iterator;
	}
}
class GroupeCouleursIterator implements Iterator{
	private $array = array();
	private $key;
	private $current;
	function __construct($array){
		$this->array = $array;
	}
	function rewind (){
		reset($this->array);
		$this->next();
	}
	function valid(){
		return $this->key !==NULL;
	}
	function key(){
		return $this->key;
	}
	function current(){
		$this->current;
	}
	function next(){
		list($key,$current) = each($this->array);
		$this->key = $key;
		$this->current = $current;
	}
}


$couleurs = new groupeCouleurs();
$couleurs->ajouteCouleur('bleu');
$couleurs->ajouteCouleur('vert');
$couleurs->ajouteCouleur('rouge');
$couleurs->ajouteCouleur('jaune');
echo "Couleurs : ";
foreach ($couleurs as  $couleur){
	echo "$couleur";
}

?>
Qui devrait normalement afficher bleu vert rouge jaune , et j'avoue que je n'arrive vraiment pas à cerner où est l'erreur..... :s
Ou est elle ?

PS(edit) : je ne suis pas certain qu'il y ait un rapport, mais peut-être ...
Trouvé dans la doc php :
Please remember that actually the only PHP iterating structure that uses Iterator is foreach().

Any each() or list() applied to an Object implementing iterator will not provide the expected result
Mais il n'est cependant pas dit que l'on ne puisse pas les utiliser dans la classe...hrummm... :-k

Posté : 11 sept. 2007, 11:47
par santaclos
et il t'affiche quoi?

Posté : 11 sept. 2007, 11:57
par Ryle
Euh... au moment du foreach(), ta variable $couleurs n'est pas un tableau mais une instance d'un objet de type groupeCouleurs. Si tu veux accéder au tableau $couleurs de cet objet, il te faut le spécifier explicitement : $couleurs->couleurs

Posté : 11 sept. 2007, 12:19
par Calimero
Euh... au moment du foreach(), ta variable $couleurs n'est pas un tableau mais une instance d'un objet de type groupeCouleurs. Si tu veux accéder au tableau $couleurs de cet objet, il te faut le spécifier explicitement : $couleurs->couleurs
Dans ce cas-là, à quoi sert l'itérateur ? :roll:

Posté : 11 sept. 2007, 12:28
par Invité
euh oui , c'est vrai ca ... Ah quoi bon un iterateur alors ?

Sinon eh bien ca ne m'affiche rien , à part "couleurs : " , aucun message d'erreur , mais c'est comme ci il n'y avait rien .

Posté : 11 sept. 2007, 12:36
par Ryle
Oups, au temps pour moi, ca m'apprendra à tout lire :)

Posté : 11 sept. 2007, 14:06
par titerm
Si tu met un return dans current() ca ira mieux...

Posté : 11 sept. 2007, 17:18
par Shadockou
8-| eeeh..hurmf ah oui oups..
Désolé, vraiment de l'étourderie ca.