égaliter entre 2 objets

Résolu
nemetos Messages postés 54 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 15 octobre 2009 - 24 oct. 2007 à 23:31
nemetos Messages postés 54 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 15 octobre 2009 - 25 oct. 2007 à 10:07
Bonjour,
je crée un objet. Après l'avoir initialiser, je veux le mettre dans un tableau.
Voici ma procédure :

$i=0;
$a = new objet1;
$b = Array(new objet1);
while (i<30)
{
   $a->propriete1='tata';
   $a->propriete2='toto';
   $b[$i]=$a;
$i++;
}
 Ceci marche en local avec easy php mais pas en ligne. Pour que ça marche en ligne je dois faire :
$b[$i]->propriete1=   $a->propriete1;
$b[$i]->propriete2=   $a->propriete2;

Existe t il un moyen de passer outre ceci car j'ai un objet qui possède plus de 20 propriétés et ça me gave de devoir faire comme ça ?
Merci.

Pizza Dude

3 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
25 oct. 2007 à 00:31
Hello,

c'est ça que tu veux ?
<?php
class A {
    public $prop1;
    public $prop2;
}

$a = new A;
$i = 1;
while($i < 30) {
    $a->prop1='a'.$i;
    $a->prop2='b'.$i;
    $b[$i] = clone $a;
    $i++;
}
var_dump($b);
?>
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
25 oct. 2007 à 00:48
Petite explication au passage, en php5, les objets sont toujours donnés par référence.
Donc que tu modifies tes propriétés de ton objet $a dans la boucle, celles des $a que tu as stockés dans $b changent aussi, parce qu'il s'agit chaque fois de référence à ton $a. Tu n'as qu'un objet, en clair.
clone évite ceci.
Il y a d'autres moyens.
3
nemetos Messages postés 54 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 15 octobre 2009
25 oct. 2007 à 10:07
Merci beaucoup !
j'ai vu un tutoriel sur les itérateurs qui pourraient m'aider.

Pizza Dude
0
Rejoignez-nous