IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Problème avec ArrayObject


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    	}

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    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.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $data['NbTopics'] = $this->NbTopics;
    La j'ai bien un affichage par la boucle :
    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)

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    En fait tu as deux méthodes :

    J'ai l'impression que dans ton cas, l'interface est la solution la mieux adaptée

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POO] probléme avec "unserialize"
    Par dragonfly dans le forum Langage
    Réponses: 3
    Dernier message: 31/10/2007, 18h22
  2. [POO] Problème avec une classe + requêtes sql
    Par mithrendil dans le forum Langage
    Réponses: 2
    Dernier message: 30/04/2007, 09h27
  3. [POO] Problème avec $this de PHP4 à PHP5
    Par c4l3m dans le forum Langage
    Réponses: 19
    Dernier message: 16/02/2007, 10h48
  4. [POO] Problème avec setInterval/méthodes d'écriture
    Par Lpu8er dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/07/2006, 16h37
  5. [POO] Problème avec l'utilisation de classes.
    Par sekiryou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 19h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo