Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/04/2008, 14h34   #1
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 42
Points : 16
Points : 16
Par défaut [POO] Problème avec ArrayObject

Bonjour,

J'essaye d'utiliser un ArrayObject dans une des méthodes d'une classe
Lorsque je tente de parcourir son contenu par un foreach ou un iterateur et de l'afficher rien ne se passe. Pourtant lorsque j'accède directement au propriété pour les afficher ça marche. Le $data->count() m'indique pourtant 0. J'avoue ne pas comprendre ce comportement. Ca fait un moment que je cherche et je trouve pas si quelqu'un à une idée.

Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function GetData(){
		$data = new ArrayObject();
		$data->lang = $this->lang;// tableau
		$data->NbTopics = $this->NbTopics;//entier
		$data->NbPosts = $this->NbPosts;//entier
		$data->NbUsers = $this->NbUsers;//entier
//		echo 'Nombre de données dans $data:'.$data->count().'<br/>';
		$iterator = $data->getIterator();
		while($iterator->valid()) {
		    echo $iterator->key() . ' => ' . $iterator->current() . "\n";
		    $iterator->next();
		}
		foreach($data as $key=>$value){
			echo "$key=>$value<br/>";
		}
		return $data;
	}
Jorael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2008, 21h15   #2
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Es-tu certain que le compteur interne est remis à zéro après le while et avant le foreach ? J'ai peur qu'en l'état actuel des choses, lorsque tu commences le foreach ce compteur soit déjà à la fin de ton tableau à cause du while.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2008, 22h39   #3
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 42
Points : 16
Points : 16
Merci pour la réponse ,

Si j'enlève le 'while' ça ne change rien je viens de retester dans le doute.
J'avoue ne pas comprendre du tout. Est ce que c'est un comportement normal ?

Si je passe l'écriture dans le style tableau habituel :
Code :
$data['NbTopics'] = $this->NbTopics;
La j'ai bien un affichage par la boucle :
Citation:
Nombre de données dans $data:2
lang=>Array
NbTopics=>15
Alors je ne comprends encore moins ?
Est ce que cela pourrait venir d'un bogue de php (j'utilise la version 5.2.0)
Jorael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2008, 23h01   #4
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
En fait tu as deux méthodes :J'ai l'impression que dans ton cas, l'interface est la solution la mieux adaptée
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 10h56   #5
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 42
Points : 16
Points : 16
C'est bon j'ai résolu le problème, il faut le paramètre ArrayObject::ARRAY_AS_PROPS si on veut pouvoir boucler sur le
ArrayObject.
Je trouve que c'est dommage ça devrait être son comportement par défaut car là je ne vois pas bien l'utilité de l'utiliser sans ce paramètre. Ça oblige également à lui passer 2 arguments lors de la construction.

Donc sans ce paramètre on peut l'utiliser comme le design patern Registre mais on ne peut pas boucler dessus pour lister son contenu. Il faut donc absolument connaitre son contenu.

N'hésitez pas à me corriger si je dis des bêtises

Merci pour l'aide.
Jorael est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h20.


 
 
 
 
Partenaires

Hébergement Web