关于global的使用疑问

<?
$var1 = 1;
$var2 = 2;
function test()
{
    global $var1,$var2;
    $var1 = &var2;
}
test();
echo $var1
?>

答案是1

我的思路:

  1. global 将 test 中的 $var1,$var2 定义成两个指针,其中 &$var1 指向 1,&$var2 指向 2.
  2. $var1 = &$var2; 此时又将 $var1 赋值 2
  3. test() 之后, $var1 不应该等于2吗?
阅读 1.9k
3 个回答
$var1 = &$var2,$var1是存放的$var2的地址啊,$var1本应该就是1啊,疑惑的应该是$var2为什么等于2不等于1啊?

赋值语句改成:$var1 = $var2;

php 中引用并不是指针,global 的定义本身就是引用方式实现的。
你可以把 函数去掉 $var1 $var2 的结果都是2
PHP手册中已经有说明

在一个函数域内部用 global 语句导入的一个真正的全局变量实际上是建立了一个到全局变量的引用。。这有可能导致预料之外的行为
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题