Объекты массива передаются по ссылке?

в такой ситуации, как показано ниже,

class my_class { public __construct($params = array()){ **** do something } } $other_object = new some_class(); $object = new my_class(array( 'var1' => 'test' 'object' => $other_object)); 

$ other_object будет передаваться по ссылке или по значению?

Solutions Collecting From Web of "Объекты массива передаются по ссылке?"

Объекты всегда являются ссылками, за исключением того, что вы clone его явно.

Вы можете использовать spl_object_hash() для извлечения «идентификатора объекта», а затем сравнить их друг с другом. Помните, что когда объект удаляется из памяти сборщиком мусора, идентификатор может быть повторно использован.

Вот один пример, который показывает ссылочный объект каждый где … http://codepad.org/HK6Oo4xL

Объекты в php передаются по значению. Подробнее см. В этом ответе .

Объекты в PHP 5 всегда передаются по ссылке. С помощью debug_zval_dump () вы можете проверить refcount для переменной, чтобы вычислить количество ссылок на экземпляр объекта. Обратите внимание на примечание в документации, вы найдете много интересного о передаче переменной функции.

с PHP 5. Объектная переменная PHP содержит ссылку или идентификатор действительной переменной. вот пример, чтобы продемонстрировать это.

 class test{ public $test = 1; } $obj1 = new test; $orginal = [$obj1,array(2),3]; $copy = $orginal; echo 'orginal array'; var_dump($orginal); echo 'copy of orginal'; var_dump($copy); //after changing $copy[0]->test = 'changed'; $copy[1][0] = 'changed'; $copy[3] = 'changed'; echo 'orginal array after changing its copy'; var_dump($original); echo 'copy of orginal after changing'; var_dump($copy); 

выход для этого

 original array array (size=3) 0 => object(test)[38] public 'test' => int 1 1 => array (size=1) 0 => int 2 2 => int 3 copy of original array (size=3) 0 => object(test)[38] public 'test' => int 1 1 => array (size=1) 0 => int 2 2 => int 3 original array after changing its copy array (size=3) 0 => object(test)[38] public 'test' => string 'changed' (length=7) 1 => array (size=1) 0 => int 2 2 => int 3 copy of original after changing array (size=3) 0 => object(test)[38] public 'test' => string 'changed' (length=7) 1 => array (size=1) 0 => string 'changed' (length=7) 2 => string 'changed' (length=7) 

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

подробнее об объектной ссылке: Объекты и ссылки