引用的返回并不是经常使用的一个能力。文档中的原文是:不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!
$a = 1; function &test(){ global $a; return $a; } $b = &test($a); $b = 2; echo $a, PHP_EOL;
当你想要返回一个引用变量的时候,一定要给方法定义和方法调用的时候都使用&符号。这个是需要注意的点。当其他地方修改原本的变量值或者返回的变量值经过修改后,都会影响到所有调用这个值的地方。所以说,引用的返回是比较危险的,因为你不清楚什么时候在什么地方这个值可能发生了修改,对于bug的排查会非常困难。
引用的取消取消引用其实就是直接unset掉变量就可以了。但是一定要记住,PHP中的引用是指向的符号表,对原始真实的值是不起作用的,所以即使unset掉了最原始的那个变量,对其它引用赋值的变量也不会有影响!!
$a = 1; $b = &$a; $c = &$b; $b = 2; echo '定义引用后:', $a, '===', $b, '===', $c, PHP_EOL; unset($b); $b = 3; echo '取消$b的引用,不影响$a、$c:', $a, '===', $b, '===', $c, PHP_EOL; $b = &$a; unset($a); echo '取消$a,不影响$b、$c:', $a, '===', $b, '===', $c, PHP_EOL; // 定义引用后:2===2===2 // 取消$b的引用:2===3===2 // 取消$a,不影响$c:===3===2 $a = 1; $b = & $a; $c = & $b; // $a, $b, $c reference the same content '1' $a = NULL; // All variables $a, $b or $c are unset echo '所有引用成空:', $a, '===', $b, '===', $c, PHP_EOL;
总结这一次算是比较彻底的把引用说了个透。关于PHP的引用只要记住了它的定义就非常好理解了,最直观的就是当成是操作系统的快捷方式就好了,并没有我们想象中的那么难,和C的指针相比真的只是娃娃级别,多多练习多多复习自然就能很好地掌握使用啦!
测试代码: github.com/zhangyue050…