PHP param по ref => присваивать ref = NULL

Я обнаружил странное поведение при передаче параметра по ссылке на метод объекта:

class Test { private $value; public function Set($value) { $this->value = $value; } public function Get(&$ref) { $ref = &$this->value; //SET REF PARAMETER TO THIS VALUE BY REF } } $test = new Test(); $test->Set('test'); $test->Get($value1); var_dump($value1); //NULL INSTEAD OF 'test'! 

edit: имя GetByRef (…) было неправильным для этого примера, переименовано в: Get (…)

edit2: Я забыл реальный тестовый пример, где я застрял:

 $test->Get($value1); $test->Get($value2); $value1 = 'Another test value'; echo $value2; //SHOULD BE SAME: 'Another test value'; 

$ value2 не знает, создано ли значение1 или нет, поэтому стандартный $ value2 = & $ value1 здесь не работает.

Вы назначаете ссылку по ссылке. Вот почему вы получаете null . Он отлично работает, если вы обычно назначаете:

 public function GetByRef(&$ref) { $ref = $this->value; } 

Объявляя &$ref в сигнатуре метода и вызывая метод, в области вызова создается переменная с значением по умолчанию null , на которое ссылается внутри метода как $ref . Делая значение $ref = &$this->value вы в основном удаляете эту ссылку и создаете новую ссылку $ref . Использование =& всегда создает новую ссылочную переменную; если вы хотите изменить его значение вместо этого, вы должны использовать = для его назначения. Таким образом, переменная, которая была создана в области вызова, остается установленной при ее начальном значении null и ее ссылка на $ref внутри метода нарушена.