Подтвердить что ты не робот

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

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

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 будет передаваться по ссылке или по значению?

4b9b3361

Ответ 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)

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

Дополнительная информация об объектной ссылке: Объекты и ссылка