Назначение массива php путем копирования значения или ссылки?

Возможный дубликат:
являются массивы в php, переданные по значению или по ссылке?

Я слышал, что PHP может выбирать, как назначать массивы, зависит от размера массива. Он может назначаться путем копирования значения (как любого скалярного типа) или путем ссылки.

PHP всегда присваивает массив переменным, копируя значение, как говорится в руководстве.

Или он может назначаться по ссылке. ?

<?php $a = array(1,2,3); ?> 

Solutions Collecting From Web of "Назначение массива php путем копирования значения или ссылки?"

Назначение массивов по ссылке возможно при назначении переменных массива другим переменным:

 // By value... $a = array(1,2,3); $b = $a; array_push($a, 5); print_r($b); // $b is not a reference to $a Array ( [0] => 1 [1] => 2 [2] => 3 ) // By Reference $a = array(1,2,3); $b = &$a; // Here we assign by reference array_push($a, 5); print_r($b); // $b is a reference to $a and gets the new value (3 => 5) Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 5 ) 

Вы не можете назначить что-то по ссылке, если вы не ссылаетесь на то, что уже существует. Точно так же вы не можете копировать то, чего не существует.

Итак, этот код:

 $a = array(1,2,3); 

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

Однако этот код:

 $x = 1; $y = 2; $z = 3; $a = array($x,$y,$z); 

… копирует значения из $x , $y и $z в массив 1 . Переменные, используемые для инициализации значений массива, по-прежнему существуют сами по себе и могут быть изменены или уничтожены без влияния на значения в массиве.

Этот код:

 $x = 1; $y = 2; $z = 3; $a = array(&$x,&$y,&$z); 

… создает массив ссылок на $x , $y и $z (обратите внимание на & ). Если после запуска этого кода я изменяю $x – допустим, я даю ему значение 4 – он также изменит первое значение в массиве. Поэтому, когда вы используете массив, $a[0] теперь будет содержать 4 .

См. Этот раздел руководства для получения дополнительной информации о том, как эталонная работа в PHP.


1 В зависимости от типов и значений переменных, используемых в качестве элементов массива, операция копирования может не произойти во время назначения даже при назначении по значению. Внутренне PHP использует copy-on-write в максимально возможном количестве по соображениям производительности и эффективности памяти. Однако, с точки зрения поведения в контексте вашего кода, вы можете рассматривать его как простую копию.

Да,

 $a = array(&$b, &$c, &$d);