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 : 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();
}
 
 
}
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
 
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 : 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);
et donc en sorti il devrait avoir changer l'attribut productList de $product à $new_product mais non !

voilà le resultat :
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
                  )
 
	   )
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 .