par
Shadockou » 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...

Bonjour j'ai un problème avec le code suivant , issue du chapitre sur la POO de PHP5 avancé : [php]<?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";
}
?>[/php]
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 : [quote]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[/quote] Mais il n'est cependant pas dit que l'on ne puisse pas les utiliser dans la classe...hrummm... :-k