В PHP присваивает ли byref var другому var присваивать ссылку или копировать значение?

Возьмите в качестве примера этот абстрактный класс из проекта, над которым я работаю. (минус все действительно интересные биты).

abstract class col_meta extends meta {

protected $col_obj;

public function inject_object(&$obj);

public function &get_object(){
return $this->col_obj;
}
}

Я понимаю что inject_object метод получает $obj в качестве ссылки, но если я хочу, чтобы класс назначил его защищенной переменной, нужно ли мне снова назначать его по ссылке?

как это:

class foo extends col_meta {

public function inject_object(&$obj){
$this->col_obj = &$obj;
}

}

Или, получив только ссылку, мне нужно просто скопировать ссылку в защищенную переменную?

class bar extends col_meta {

public function inject_object(&$obj){
$this->col_obj = $obj;
}

}

Я связывал свои мысли в узлах, пытаясь решить это, поскольку они оба кажутся правильными.

0

Решение

По определению, путем ссылки является «путем ссылки»; Это означает, что если значение изменяется в функции, оно изменяется в вызывающем скрипте.

Однако — поскольку это обеспечивает лучшую производительность — если вы передаете «по значению», PHP по-прежнему передает ссылку на функцию, но создает копию (по значению), если вы изменяете значение в функции.

Обратите внимание, что объекты всегда эффективно «передаются по ссылке», потому что ваша переменная объекта на самом деле является указателем на объект, поэтому любые изменения в объекте внутри функции также будут отражаться и вне функции.

Не передавайте по ссылке, если вы явно не хотите, чтобы переменная, измененная внутри функции, изменялась также и вне функции.

Если вам нужна «копия» объекта внутри вашего класса, а не ссылка; затем используйте clone создать копию.

1

Другие решения

Других решений пока нет …