Bonjour à tous,

J'ai une petite question concernant la création de tableau d'objets en PHP 5.3. J'ai le code suivant :

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
 
$foolist = array();
$myad = new StdClass();
 
$myad->data = 'foo';
 
$foolist[] = $myad;
 
var_dump($foolist);
 
$myad->data = 'foo2';
 
$foolist[] = $myad;
 
var_dump($foolist);
En exécutant le code, je m'attends à ce que le deuxième var_dump me donne un tableau dont le premier objet contiendrait 'foo' et le deuxième 'foo2'. Or, voilà ce que m'affiche le 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
18
19
20
 
array(1) {
  [0]=>
  object(stdClass)#1 (1) {
    ["data"]=>
    string(3) "foo"
  }
}
array(2) {
  [0]=>
  object(stdClass)#1 (1) {
    ["data"]=>
    string(4) "foo2"
  }
  [1]=>
  object(stdClass)#1 (1) {
    ["data"]=>
    string(4) "foo2"
  }
}
D'après ce résultat, le tableau contient 2 fois le même objet. Je suis super étonné de ce résultat (à noter qu'en PHP 5.2, j'obtiens bien ce que je veux), il me semblait que l'opérateur [] assignait par copie et non par référence (ce qu'il semble faire dans le cas présent).

Est-ce que quelqu'un pourrait me dire si je m'y prends mal et pourquoi j'ai ce comportement ?


Merci de votre aide.