这是什么意思"换句话说,数组的引用行为是在逐个元素的基础上定义的;各个元素的引用行为与数组容器的引用状态分离."
单个元素如何与数组容器的引用状态分离?我是彻底的医生,我很困惑这意味着什么?
Rizier123.. 6
我想如果你使用一些ASCII艺术,你可能会更好地理解它:
//Line 01 $a = 1; ---------- ???????? ??????? ? $a ? ?????????????????> ? 1 ? ???????? ???????
//Line 02 $b = &$a; ---------- ???????? ??????? ? $a ? ?????????????????> ? 1 ? ???????? ??????? ^ ???????? ? ? $b ? ???????????????????????? ????????
//Line 03 $c = $b; ---------- ???????? ??????? ? $a ? ?????????????????> ? 1 ? ???????? ??????? ^ ???????? ? ? $b ? ???????????????????????? ???????? ???????? ??????? ? $c ? ?????????????????> ? 1 ? ???????? ???????
//Line 04 $c = 7; ---------- ???????? ??????? ? $a ? ?????????????????> ? 1 ? ???????? ??????? ^ ???????? ? ? $b ? ???????????????????????? ???????? ???????? ??????? ? $c ? ?????????????????> ? 7 ? ???????? ???????
现在,您可以看到通过引用分配变量并更改它时,它也将更改另一个变量的值.这里有个例子$a
和$b
,如果您分配5 $b
,$a
也将指向5,反之亦然.
但是你没有分配$b
给$c
引用(你做一个正常的赋值),所以如果你改变的值$c
也不会改变的值$b
(或$a
).
//Line 01 $arr = array(1); ---------- ????????????? ??????? ? $arr[0] ? ?????????????????> ? 1 ? ????????????? ???????
//Line 02 $a = &$arr[0]; ---------- ????????????? ??????? ? $arr[0] ? ?????????????????> ? 1 ? ????????????? ??????? ^ ???????? ? ? $a ? ????????????????????????????? ????????
//Line 03 $arr2 = $arr; ---------- ????????????? ??????? ? $arr[0] ? ?????????????????> ? 1 ? ????????????? ??????? ^ ???????? ? ? $a ? ????????????????????????????? ???????? ? ? ?????????????? ? ? $arr2[0] ? ??????????????????????? ??????????????
//Line 04 $arr2[0]++; ---------- ????????????? ??????? ? $arr[0] ? ?????????????????> ? 2 ? ????????????? ??????? ^ ???????? ? ? $a ? ????????????????????????????? ???????? ? ? ?????????????? ? ? $arr2[0] ? ??????????????????????? ??????????????
现在这里是手册试图解释的内容:
$arr2 = $arr;
即使您没有$arr
通过引用分配数组$arr2
,该数组仍然包含一个指向引用的元素!并且该引用仍然存在$arr2
,因此第二个数组的第一个元素也指向引用as $arr[0]
和$a
do.
也许如果您通过引用分配数组时看到差异,并且当数组包含带引用的元素时,您可以更好地理解它:
//Line 01 $arr1 = [1, 1, 1]; ---------- ??????????? ? $arr1 ? ??????????? ? ? ??????????> ?????????????? ? Array ? ??????? ? container: ? ????> ? 1 ? ?????????????? ? ??????? ? [0] ? ???? ?????????????? ??????? ? [1] ? ???????> ? 1 ? ?????????????? ??????? ? [2] ? ???? ?????????????? ? ??????? ????> ? 1 ? ???????
//Line 02 $arr2 = &$arr1; ---------- ??????????? ? $arr1 ? ??????????? ? ? ??????????> ?????????????? ? Array ? ??????? ? container: ? ????> ? 1 ? ?????????????? ? ??????? ? [0] ? ???? ?????????????? ??????? ? [1] ? ???????> ? 1 ? ?????????????? ??????? ? [2] ? ???? ??????????> ?????????????? ? ??????? ? ????> ? 1 ? ? ??????? ??????????? ? $arr2 ? ???????????
//Line 03 & 04 $arr2[0] = 2; $arr2[1] = 2; ---------- ??????????? ? $arr1 ? ??????????? ? ? ??????????> ?????????????? ? Array ? ??????? ? container: ? ????> ? 2 ? ?????????????? ? ??????? ? [0] ? ???? ?????????????? ??????? ? [1] ? ???????> ? 2 ? ?????????????? ??????? ? [2] ? ???? ??????????> ?????????????? ? ??????? ? ????> ? 1 ? ? ??????? ??????????? ? $arr2 ? ???????????
所以你可以在这里看到,因为你分配$arr1
给$arr2
引用它们都指向同一个数组.
//Line 01 $a = 1; ---------- ???????? ??????? ? $a ? ?????????????????> ? 1 ? ???????? ???????
//Line 02 $arr3 = [&$a, 1, 1]; ---------- ???????? ??????? ? $a ? ??????????????????> ? 1 ? ???????? ??????? ^ ??????????? ? ? $arr3 ? ? ??????????? ? ? ? ? ? ??????????> ?????????????? ? ? Array ? ? ? container: ? ? ?????????????? ? ? [0] ? ???? ?????????????? ??????? ? [1] ? ???????> ? 1 ? ?????????????? ??????? ? [2] ? ???? ?????????????? ? ??????? ????> ? 1 ? ???????
//Line 03 $arr4 = $arr3; ---------- ???????? ??????? ? $a ? ??????????????????> ? 1 ? ????????? ???????? ??????? ? ^ ? ??????????? ? ? ? $arr3 ? ? ? ??????????? ? ? ? ? ? ? ? ? ??????????> ?????????????? ? ? ? Array ? ? ? ? container: ? ? ? ?????????????? ? ? ? [0] ? ???? ? ?????????????? ??????? ? ? [1] ? ???????> ? 1 ? ? ?????????????? ??????? ? ? [2] ? ???? ? ?????????????? ? ??????? ? ????> ? 1 ? ? ??????? ? ? ??????????? ? ? $arr4 ? ? ??????????? ? ? ? ? ? ??????????> ?????????????? ? ? Array ? ? ? container: ? ? ?????????????? ? ? [0] ? ??????????????????? ?????????????? ??????? ? [1] ? ???????> ? 1 ? ?????????????? ??????? ? [2] ? ???? ?????????????? ? ??????? ????> ? 1 ? ???????
//Line 03 & 04 $arr4[0] = 2; $arr4[1] = 2; ---------- ???????? ??????? ? $a ? ??????????????????> ? 2 ? ????????? ???????? ??????? ? ^ ? ??????????? ? ? ? $arr3 ? ? ? ??????????? ? ? ? ? ? ? ? ? ??????????> ?????????????? ? ? ? Array ? ? ? ? container: ? ? ? ?????????????? ? ? ? [0] ? ???? ? ?????????????? ??????? ? ? [1] ? ???????> ? 1 ? ? ?????????????? ??????? ? ? [2] ? ???? ? ?????????????? ? ??????? ? ????> ? 1 ? ? ??????? ? ? ??????????? ? ? $arr4 ? ? ??????????? ? ? ? ? ? ??????????> ?????????????? ? ? Array ? ? ? container: ? ? ?????????????? ? ? [0] ? ??????????????????? ?????????????? ??????? ? [1] ? ???????> ? 2 ? ?????????????? ??????? ? [2] ? ???? ?????????????? ? ??????? ????> ? 1 ? ???????
所以你可以在这里看到,即使你分配$arr3
到$arr4
的价值,而不是通过参考!该数组仍包含该引用,该引用与$a
和共享$arr3[0]
.
我想如果你使用一些ASCII艺术,你可能会更好地理解它:
//Line 01 $a = 1; ---------- ???????? ??????? ? $a ? ?????????????????> ? 1 ? ???????? ???????
//Line 02 $b = &$a; ---------- ???????? ??????? ? $a ? ?????????????????> ? 1 ? ???????? ??????? ^ ???????? ? ? $b ? ???????????????????????? ????????
//Line 03 $c = $b; ---------- ???????? ??????? ? $a ? ?????????????????> ? 1 ? ???????? ??????? ^ ???????? ? ? $b ? ???????????????????????? ???????? ???????? ??????? ? $c ? ?????????????????> ? 1 ? ???????? ???????
//Line 04 $c = 7; ---------- ???????? ??????? ? $a ? ?????????????????> ? 1 ? ???????? ??????? ^ ???????? ? ? $b ? ???????????????????????? ???????? ???????? ??????? ? $c ? ?????????????????> ? 7 ? ???????? ???????
现在,您可以看到通过引用分配变量并更改它时,它也将更改另一个变量的值.这里有个例子$a
和$b
,如果您分配5 $b
,$a
也将指向5,反之亦然.
但是你没有分配$b
给$c
引用(你做一个正常的赋值),所以如果你改变的值$c
也不会改变的值$b
(或$a
).
//Line 01 $arr = array(1); ---------- ????????????? ??????? ? $arr[0] ? ?????????????????> ? 1 ? ????????????? ???????
//Line 02 $a = &$arr[0]; ---------- ????????????? ??????? ? $arr[0] ? ?????????????????> ? 1 ? ????????????? ??????? ^ ???????? ? ? $a ? ????????????????????????????? ????????
//Line 03 $arr2 = $arr; ---------- ????????????? ??????? ? $arr[0] ? ?????????????????> ? 1 ? ????????????? ??????? ^ ???????? ? ? $a ? ????????????????????????????? ???????? ? ? ?????????????? ? ? $arr2[0] ? ??????????????????????? ??????????????
//Line 04 $arr2[0]++; ---------- ????????????? ??????? ? $arr[0] ? ?????????????????> ? 2 ? ????????????? ??????? ^ ???????? ? ? $a ? ????????????????????????????? ???????? ? ? ?????????????? ? ? $arr2[0] ? ??????????????????????? ??????????????
现在这里是手册试图解释的内容:
$arr2 = $arr;
即使您没有$arr
通过引用分配数组$arr2
,该数组仍然包含一个指向引用的元素!并且该引用仍然存在$arr2
,因此第二个数组的第一个元素也指向引用as $arr[0]
和$a
do.
也许如果您通过引用分配数组时看到差异,并且当数组包含带引用的元素时,您可以更好地理解它:
//Line 01 $arr1 = [1, 1, 1]; ---------- ??????????? ? $arr1 ? ??????????? ? ? ??????????> ?????????????? ? Array ? ??????? ? container: ? ????> ? 1 ? ?????????????? ? ??????? ? [0] ? ???? ?????????????? ??????? ? [1] ? ???????> ? 1 ? ?????????????? ??????? ? [2] ? ???? ?????????????? ? ??????? ????> ? 1 ? ???????
//Line 02 $arr2 = &$arr1; ---------- ??????????? ? $arr1 ? ??????????? ? ? ??????????> ?????????????? ? Array ? ??????? ? container: ? ????> ? 1 ? ?????????????? ? ??????? ? [0] ? ???? ?????????????? ??????? ? [1] ? ???????> ? 1 ? ?????????????? ??????? ? [2] ? ???? ??????????> ?????????????? ? ??????? ? ????> ? 1 ? ? ??????? ??????????? ? $arr2 ? ???????????
//Line 03 & 04 $arr2[0] = 2; $arr2[1] = 2; ---------- ??????????? ? $arr1 ? ??????????? ? ? ??????????> ?????????????? ? Array ? ??????? ? container: ? ????> ? 2 ? ?????????????? ? ??????? ? [0] ? ???? ?????????????? ??????? ? [1] ? ???????> ? 2 ? ?????????????? ??????? ? [2] ? ???? ??????????> ?????????????? ? ??????? ? ????> ? 1 ? ? ??????? ??????????? ? $arr2 ? ???????????
所以你可以在这里看到,因为你分配$arr1
给$arr2
引用它们都指向同一个数组.
//Line 01 $a = 1; ---------- ???????? ??????? ? $a ? ?????????????????> ? 1 ? ???????? ???????
//Line 02 $arr3 = [&$a, 1, 1]; ---------- ???????? ??????? ? $a ? ??????????????????> ? 1 ? ???????? ??????? ^ ??????????? ? ? $arr3 ? ? ??????????? ? ? ? ? ? ??????????> ?????????????? ? ? Array ? ? ? container: ? ? ?????????????? ? ? [0] ? ???? ?????????????? ??????? ? [1] ? ???????> ? 1 ? ?????????????? ??????? ? [2] ? ???? ?????????????? ? ??????? ????> ? 1 ? ???????
//Line 03 $arr4 = $arr3; ---------- ???????? ??????? ? $a ? ??????????????????> ? 1 ? ????????? ???????? ??????? ? ^ ? ??????????? ? ? ? $arr3 ? ? ? ??????????? ? ? ? ? ? ? ? ? ??????????> ?????????????? ? ? ? Array ? ? ? ? container: ? ? ? ?????????????? ? ? ? [0] ? ???? ? ?????????????? ??????? ? ? [1] ? ???????> ? 1 ? ? ?????????????? ??????? ? ? [2] ? ???? ? ?????????????? ? ??????? ? ????> ? 1 ? ? ??????? ? ? ??????????? ? ? $arr4 ? ? ??????????? ? ? ? ? ? ??????????> ?????????????? ? ? Array ? ? ? container: ? ? ?????????????? ? ? [0] ? ??????????????????? ?????????????? ??????? ? [1] ? ???????> ? 1 ? ?????????????? ??????? ? [2] ? ???? ?????????????? ? ??????? ????> ? 1 ? ???????
//Line 03 & 04 $arr4[0] = 2; $arr4[1] = 2; ---------- ???????? ??????? ? $a ? ??????????????????> ? 2 ? ????????? ???????? ??????? ? ^ ? ??????????? ? ? ? $arr3 ? ? ? ??????????? ? ? ? ? ? ? ? ? ??????????> ?????????????? ? ? ? Array ? ? ? ? container: ? ? ? ?????????????? ? ? ? [0] ? ???? ? ?????????????? ??????? ? ? [1] ? ???????> ? 1 ? ? ?????????????? ??????? ? ? [2] ? ???? ? ?????????????? ? ??????? ? ????> ? 1 ? ? ??????? ? ? ??????????? ? ? $arr4 ? ? ??????????? ? ? ? ? ? ??????????> ?????????????? ? ? Array ? ? ? container: ? ? ?????????????? ? ? [0] ? ??????????????????? ?????????????? ??????? ? [1] ? ???????> ? 2 ? ?????????????? ??????? ? [2] ? ???? ?????????????? ? ??????? ????> ? 1 ? ???????
所以你可以在这里看到,即使你分配$arr3
到$arr4
的价值,而不是通过参考!该数组仍包含该引用,该引用与$a
和共享$arr3[0]
.