[POO] Modifier attributs d'un objet par référence
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
Code:
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();
}
} |
ma deuxième classe
Code:
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);
}
} |
mon code
Code:
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); |
et donc en sorti il devrait avoir changer l'attribut productList de $product à $new_product mais non !
voilà le resultat :
Code:
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
)
) |
il ne me change que les 2 premières ligne du tableau la 3ième restant d'origine ..
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 .