昨天,朋友问我一个问题,问题如下:
<?php
$a=1;
$b=2;
function test(){
global $a,$b;
$b=20;
$a=&$b;
}
test();
echo $a;
?>
问,这段代码最后输出什么值?
按照我的第一理解,我会回答20。但是一想,如果答案是20,那么朋友就没必要问我了,于是自认聪明的回答2.
朋友摇摇头,让我在机器上测试一下,意想不到的结果出现了,1.
经过翻阅文档,网上查资料,我个人的理解是这样的,问题的所在其实就是php中函数内部申明global变量,它会在本地空间创建一个本地的a变量,但是把它的值指向外部的a所存储值的内存位置,所以$a=&$b仅仅将本地空间的那个a的值保存的位置指向本地的b变量,而并没有改变本地a之前所指向的外部a的存储的值,然后在函数外部输出$a,自然输出的是外部的$a变量,结果自然是1.