$arr = array(1);
$a = & $arr[0];
$arr2 = $arr;
$arr2[0]++;
echo $arr[0],$arr2[0];
// Output 2,2
どうすればそれが可能か教えていただけますか?
$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 i.e. 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] は同じ割り当てられたメモリを指しているように見えるため、ポインタの 1 つをインクリメントすると、int はメモリ内でインクリメントされます。