$arr = array(1); $a = & $arr[0]; $arr2 = $arr; $arr2[0]++; echo $arr[0],$arr2[0]; // Output 2,2
Не могли бы вы помочь мне, как это возможно?
Однако обратите внимание, что ссылки внутри массивов потенциально опасны. Выполнение нормального (не по ссылке) присваивания с помощью ссылки с правой стороны не превращает левую сторону в ссылку, но ссылки внутри массивов сохраняются в этих нормальных назначениях. Это также относится к вызовам функций, где массив передается по значению.
/* Assignment of array variables */ $arr = array(1); $a =& $arr[0]; //$a and $arr[0] are in the same reference set $arr2 = $arr; //not an assignment-by-reference! $arr2[0]++; /* $a == 2, $arr == array(2) */ /* The contents of $arr are changed even though it's not a reference! */
$arr = array(1);//creates an Array ( [0] => 1 ) and assigns it to $arr $a = & $arr[0];//assigns by reference $arr[0] to $a and thus $a is a reference of $arr[0]. //Here $arr[0] is also replaced with the reference to the actual value ie 1 $arr2 = $arr;//assigns $arr to $arr2 $arr2[0]++;//increments the referenced value by one echo $arr[0],$arr2[0];//As both $aar[0] and $arr2[0] are referencing the same block of memory so both echo 2 // Output 22
Похоже, что $ arr [0] и $ arr2 [0] указывают на одну и ту же выделенную память, поэтому, если вы увеличиваете один из указателей, int будет увеличиваться в памяти
Ссылка Есть ли указатели в php?