в такой ситуации, как показано ниже,
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 будет передаваться по ссылке или по значению?
Объекты всегда являются ссылками, за исключением того, что вы 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)
когда объект в копии изменяется, исходный объект также изменяется, но массив и переменная остаются неизменными, поскольку они передаются как значение.
подробнее об объектной ссылке: Объекты и ссылки