У меня проблема со ссылками;пример должен быть более наглядным, чем я: P
У меня есть класс, который имеет массив объектов и извлекает их через ключ (строку), как ассоциативный массив:
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;
}
}
Затем у меня есть объект (универсальный), с ключом и некоторыми переменными:
class Element {
public $key;
public $another_var;
public function __construct($key) {
$this->key = $key;
$this->another_var = "default";
}
}
Теперь я создаю свою коллекцию:
$collection = new Collection();
$collection->add_element(new Element("test1"));
$collection->add_element(new Element("test2"));
И затем я пытаюсь изменить переменнуюэлемент, содержащийся в моем "массиве":
$element = $collection->get_element("test1");
$element->another_var = "random_string";
echo $collection->get_element("test1")->another_var;
Хорошо, вывод
random_string
, поэтому я знаю, что мой объект передается в $ element в режиме ссылки.
Но если я это сделаю, вместо этого:
$element = $collection->get_element("test1");
$element = null; //or $element = new GenericObject();
$element->another_var = "bla";
echo $collection->get_element("test1")->another_var;
вывод будет
default
, как если бы он потерял ссылку.
Итак, что не так?У меня есть ссылки на переменные элемента, а не на сам элемент?
Есть идеи?
edit: Чтобы уточнить, я хочу "заменить" элемент объекта другим,но сохраняя позицию в массиве.
Теперь я понимаю, что это невозможно таким образом: (