J'ai un problème de référence; l'exemple doit être plus descriptif que moi: PProblème de référence lors du retour d'un objet à partir d'un tableau dans PHP
J'ai une classe qui a un tableau d'objets et de les récupérer par une clé (chaîne), comme un tableau associatif:
class Collection {
public $elements;
function __construct() {
$this->elements = array();
}
public function get_element($key) {
foreach($this->elements as $element) {
if ($element->key == $key) {
return $element;
break;
}
}
return null;
}
public function add_element ($element) {
$this->elements[] = $element;
}
}
Puis-je avoir un objet (générique), avec une clé et certaines variables:
class Element {
public $key;
public $another_var;
public function __construct($key) {
$this->key = $key;
$this->another_var = "default";
}
}
maintenant, je crée ma collection:
$collection = new Collection();
$collection->add_element(new Element("test1"));
$collection->add_element(new Element("test2"));
Et puis j'essaie de changer la variable d'un élément contenu dans mon « tableau »:
$element = $collection->get_element("test1");
$element->another_var = "random_string";
echo $collection->get_element("test1")->another_var;
Ok, la sortie est
random_string
donc je sais que mon objet est passé à l'élément $ en référence mode.
Mais si je fais, à la place:
$element = $collection->get_element("test1");
$element = null; //or $element = new GenericObject();
$element->another_var = "bla";
echo $collection->get_element("test1")->another_var;
la sortie est
default
comme si elle a perdu la référence.
Alors, qu'est-ce qui ne va pas? J'ai les références aux variables de l'élément et non à l'élément lui-même?
Des idées? Edit: Pour clarifier, je veux "changer" l'élément objet avec un autre, mais en gardant la position dans le tableau.
Maintenant, je comprends ce n'est pas possible de cette façon :(
pourquoi vous essayez d'accéder à une référence null? Quel genre de résultat vous attendriez-vous? – Simon