大佬教程收集整理的这篇文章主要介绍了通过引用分配PHP的误解,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在下面给出的代码中,$arr [0]结果“ 2”的含义是什么,$arr2正在复制$arr并将其第一个值增加一个,因此$arr2 [0]“ 2”的结果很明显,但是是什么呢?发生在$arr上时,当我像$a =& $arr [0]这样将引用$arr [0]传递给$a时,当我将$arr [0]传递给值$a =时,$arr [0]的结果为2 $arr [0 [$arr [0]的结果应设置为1,有人可以启发我吗?
<?PHP
$a = 1;
$arr = array(1);
$a = &$arr[0];
$arr2 = $arr;
$arr2[0]++;
echo $arr[0]. "<br>";//2
echo $arr2[0]. "<br>";//2
?>
解决方法:
PHP中的引用不同于指针.当您通过引用分配或传递某些内容时,会创建我们称为“引用集”的内容,其中两个变量都是对同一“ zval”(内存中保存变量的类型和值的结构)的引用.
一个重要的后果是引用是对称的.我倾向于将引用分配写为$foo =& ;; $bar而不是$foo =& $bar强调了这一点:运算符不仅引用$bar并将其放入$foo,还会影响两个操作数.
$arr = array(1);
这将创建两个zval:一个用于$arr数组本身,另一个用于该数组位置0($arr [0])中的值.
$a =& $arr[0];
这会将$a和$arr [0]绑定到参考集中.无论使用哪种名称,我们都将使用与先前创建的zval相同的zval,目前拥有1.
$arr2 = $arr;
这会将$arr的内容复制到新的数组zval $arr2中.但是它不会将数组中的引用解析为值,而只是复制它们是引用的事实.
因此,$arr2 [0]现在也是包含$arr [0]和$a的引用集的一部分.
$arr2[0]++;
echo $arr[0]. "<br>";//2
echo $arr2[0]. "<br>";//2
由于它们都是同一参考集的一部分,因此它们都指向相同的zval,它是整数2.
不可避免的问题是“错误还是功能?”一个更有用的示例是将包含引用的数组传递给函数:
function foo($array) {
$array[0] = 42;
$arraY[1] = 69;
}
$a = 1;
$b = 1;
$foo = [ &$a, &$b ];
foo($foo);
echo $a; // 42
echo $b; // 69
像赋值一样,传递给函数不会破坏引用,因此操纵它们的代码可以安全地重构为多个函数.
以上是大佬教程为你收集整理的通过引用分配PHP的误解全部内容,希望文章能够帮你解决通过引用分配PHP的误解所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。