Объекты массива передаются по ссылке?
в такой ситуации, как показано ниже,
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 будет передаваться по ссылке или по значению?
Ответы
Ответ 1
Объекты всегда являются ссылками, за исключением вас clone
явно.
Вы можете использовать spl_object_hash()
для извлечения "идентификатора объекта", а затем сравнить их друг с другом. Помните, что когда объект удаляется из памяти сборщиком мусора, идентификатор может повторно использоваться.
Ответ 2
Вот один пример, который показывает ссылочный объект каждый где... http://codepad.org/HK6Oo4xL
Ответ 3
Объекты в php передаются по значению. Подробнее см. этот ответ.
Ответ 4
Объекты в PHP 5 всегда передаются по ссылке. С помощью debug_zval_dump() вы можете проверить refcount для переменной, чтобы вычислить количество ссылок на экземпляр объекта. Обратите внимание на примечание в документации, вы найдете много интересного о передаче переменной функции.
Ответ 5
по переменной 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)
когда объект в копии изменяется, исходный объект также изменяется, но массив и переменная остаются неизменными, поскольку они передаются как значение.
Дополнительная информация об объектной ссылке: Объекты и ссылка