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/06/2008, 20h09   #1
Membre actif
 
Avatar de Momodedf
 
Inscription : juillet 2007
Messages : 246
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juillet 2007
Messages : 246
Points : 176
Points : 176
Par défaut [POO] attribut Array

Bonjour,

J'utilise une classe utilisateur, et une classe liste d'utilisateurs.
Ma classe liste d'utilisateurs possède 3 attributs, un tableau et une instance ma classe qui gere les requetes sql et un indice pour le bout de code de remplissage du tableau.

Voici le code concerné:

Code :
1
2
3
4
5
6
7
8
9
$this->qm->query($requete); // effectue un mysql_query
			$tmp_user = new Utilisateur();
			while($tmp = $this->qm->toArray()) { // effectue un mysql_fetch_array
				$tmp_user->getUser($tmp[0]);
				echo $tmp[0] . "<br/>";
				$this->utilisateurs[$this->i] = $tmp_user;
				$this->i++;
			}
			$this->i = 0;
La création de l'user se fait normalement mais je ne sais pas pourquoi quand je fais $this->utilisateurs[$this->i] = $tmp_user; le nouvel user est mis au rang i et écrase aussi les user contenu dans les rangs précédents du tableau.

J'ai aussi écrit ce code avec la fonction array_push() j'obtient le même résultat.

Je ne comprend vraiment pas le "phénomene", quelqu'un peut il m'aider ?
Momodedf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2008, 20h24   #2
Inactif
 
Inscription : mai 2008
Messages : 179
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 179
Points : 179
Points : 179
Déjà je doute fortement que $this->qm->toArray() fasse ce que tu penses qu'elle fait, ou alors elle est très, très mal nommée.
sielfried est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2008, 20h44   #3
Membre actif
 
Avatar de Momodedf
 
Inscription : juillet 2007
Messages : 246
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juillet 2007
Messages : 246
Points : 176
Points : 176
Sisi la methode toArray fait un mysql_fetch_array(), c'est sur et certain.
Momodedf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2008, 21h07   #4
Inactif
 
Inscription : mai 2008
Messages : 179
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 179
Points : 179
Points : 179
OK donc nommage horrible.

Fais un var_dump($tmp_user) et un var_dump($this->utilisateurs) et tu verras bien ce qui cloche.
sielfried est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2008, 21h10   #5
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
Bon, le tout est de savoir ce qu'il y a dans quelle variable. Donc je te conseille un var_dump de this, qui te donnera le contenu de tous les attributs de ton objet. (de préférence avant l'ajout de $tmp_user dans le tableau...)
Code :
1
2
3
echo '<pre>';
var_dump($this);
echo '</pre>';
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2008, 21h35   #6
Membre actif
 
Avatar de Momodedf
 
Inscription : juillet 2007
Messages : 246
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juillet 2007
Messages : 246
Points : 176
Points : 176
J'ai fait ce que vous m'avez dit tout les deux (d'ailleurs grand merci Celira pour la balise pre jusqu'à maintenant je galerais pour lire mes var_dump).

Et ça confirme ce que j'avais remarqué.

Lorsque je rajoute une entrée dans mon tableau, celle-ce se rajoute à la fin et écrase toutes les entrée précédentes.
Et je comprend vraiment pas pourquoi.
Momodedf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2008, 21h56   #7
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
Alors 1) quelle est la valeur de i avant l'ajout (genre tu ne remplacerais pas infiniment le même élément) et 2) utilisateurs est-il bien un tableau ? (on sait jamais, c'est déjà arrivé..)

array_push ne fonctionne pas non plus ?

De rien pour les balises, je galérais tout autant avant...
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2008, 22h06   #8
Membre actif
 
Avatar de Momodedf
 
Inscription : juillet 2007
Messages : 246
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juillet 2007
Messages : 246
Points : 176
Points : 176
J'ai réessayé avec array_push et ça produit exactement le même effet (donc ça doit répondre à la premiere question).
Pour la seconde je fais ça $this->utilisateurs = array(); dans mon __construct().

J'hésite à poster le var_dump il est assez imposant (250 lignes avec les balises <pre>.
Momodedf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2008, 13h36   #9
Membre actif
 
Avatar de Momodedf
 
Inscription : juillet 2007
Messages : 246
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juillet 2007
Messages : 246
Points : 176
Points : 176
Bon ben je sais pas comment l'idée est venu mais aprés m'être cassé la tête pendant 2jours j'ai trouvé.

Je remet l'ancien code :

Code :
1
2
3
4
5
6
7
 
			$this->qm->query($requete);
			$tmp_user = new Utilisateur();
			while($tmp = $this->qm->toArray()) {
				$tmp_user->getUser($tmp[0]);
				array_push($this->utilisateurs, $tmp_user);
			}
Et le nouveau :

Code :
1
2
3
4
5
6
7
 
			$this->qm->query($requete);
			while($tmp = $this->qm->toArray()) {
				$tmp_user = new Utilisateur();
				$tmp_user->getUser($tmp[0]);
				array_push($this->utilisateurs, $tmp_user);
			}
Donc si je comprends bien, ce que je met dans le tableau n'est pas une copie de mon objet Utilisateur mais sa référence.
Donc quand je le modifie dans le passage suivant de la boucle ben ce que j'ai enregistré est n'est pas conservé ?
Momodedf 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 02h07.


 
 
 
 
Partenaires

Hébergement Web