IteratorAggregate , rien ne s'affiche.

Eléphant du PHP | 97 Messages

10 sept. 2007, 21:12

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

Eléphanteau du PHP | 26 Messages

11 sept. 2007, 11:47

et il t'affiche quoi?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 sept. 2007, 11:57

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
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 2287 Messages

11 sept. 2007, 12:19

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:
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Invité
Invité n'ayant pas de compte PHPfrance

11 sept. 2007, 12:28

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 .

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 sept. 2007, 12:36

Oups, au temps pour moi, ca m'apprendra à tout lire :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 505 Messages

11 sept. 2007, 14:06

Si tu met un return dans current() ca ira mieux...

Eléphant du PHP | 97 Messages

11 sept. 2007, 17:18

8-| eeeh..hurmf ah oui oups..
Désolé, vraiment de l'étourderie ca.