Bonjour,
je cherche le moyen de modifier un attribut d'un objet via une fonction dans la lequelle cet objet est passé par référence.
quelques ligne de code vallent mieux qu'un long discours :
voilà pour faire tres simple ma première classe
ma deuxième classe
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 class order { private productList = array(); public function __construct( ..... ... public function setProductList($list=array()) { $this->productList = $list; } public function unsetProductList() { $this->productList = array(); } }
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 class orderBehavior { public static function modifyOrder(&$o) { // un autre tableau ( ici juste pour l'exemple ) $new_product = array( array('id'=>10, 'name' => 'newnom1'), array('id'=>20, 'name' => 'newnom2') ); $o->unsetProductList(); $o->setProductList($new_product); } }
et donc en sorti il devrait avoir changer l'attribut productList de $product à $new_product mais non !
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 //j'instancie un objet de la classe order $product = array( array('id'=>1, 'name' => 'nom1'), array('id'=>2, 'name' => 'nom2'), array('id'=>3, 'name' => 'nom3') ); $o = new order(); // je passe mon tableau $o->setProductList($product) ; // j'appel mon autre function orderBehavior::modifyOrder($o);
voilà le resultat :
il ne me change que les 2 premières ligne du tableau la 3ième restant d'origine ..
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
21
22 [productList] => Array ( [0] => Array ( [id] => 10 [name] => newnom1 ) [1] => Array ( [id] => 20 [name] => newnom2 ) [2] => Array ( [id] => 3 [name] => nom3 ) )
Si mon tableau $new_product comporte le mm nombre de ligne que le premier pas de soucis donc , mais il il en comporte moins il ne change que les clés correspondante .
En bref la fonction unsetProductList() est totalement sans effet !
Si quelqu'un peu m'aider à comprendre ca , je lui en serait tres reconnaissant.
Merci d'avance .
Partager