根据我所能查到的资料,只说superglobal和global的区别就在于global在函数中需要声明一下,其他的没有区别。但是:例1:<?php$a = 1;
$b["a"] = &$a;
unset($b["a"]);
echo $a;?>得到以下输出
1例2:<?php$a = 1;
$BLOBALS["a"] = &$a;
unset($BLOBALS["a"]);
echo $a;?>得到以下输出
Notice: Undefined variable:aWHY? 明明都是引用,而unset也只是销毁引用,为什么例2会报错,谁能确切的解释一下。我查遍了也没找到有用的资料。

解决方案 »

  1.   

    是 $GLOBALS吧你的例子2中 $GLOBALS["a"]  就是 $a例子1删掉的只是下标为"a"的数组$b的元素,跟$a没任何关系
      

  2.   

    5.2以上的php全部指针已经融入了,我自己认为的
      

  3.   

    to: 3楼$BLOBALS 写错了,应该是$GLOBALS。
    =================================================按你说的我的例2和例1操作基本相同,同样是删掉一个下标为"a"的数组的元素,为什么例2会报错???
      

  4.   

    那你试试反过来的,,删掉$a;  打印数组元素 $GLOBALS["a"];同样的错误吧??因为 这两者是一回事,你不要分开来看而另一个例子,删掉的是个普通数组的元素,跟$a没关系$a = 1;
    $GLOBALS["a"] = &$a;
    unset($a);
    echo $GLOBALS["a"];
      

  5.   

     $a 与$GLOBALS["a"]是同一个变量  而不是2个不同的变量 
      

  6.   

    谁能从php的实现机制上解释一下,比如1楼的那样,尽管他是猜的。
      

  7.   

    自从融合指针后$b["a"] = &$a与$b["a"] = &$a是一回事了,要说不一样也只是第二种写法难看(并且画蛇添足)
      

  8.   

    自从融合指针后$b["a"] = &$a与$b["a"] = $a是一回事了,要说不一样也只是第二种写法难看(并且画蛇添足)
      

  9.   

    你所谓的融合指针哪里有资料,给个链接好吗!!还有你说的融合指针是只针对superglobal的吧。
      

  10.   

    新版本的指针确是去掉了。好像是php6中 使用 & 指针传递会出错。
      

  11.   

    楼主用unset是不管用的
    $a = 1;
    $b = &$a;
    $b = 2;
    echo $a;//输出结果:2
      

  12.   

    这可能和PHP的GC机制有点关系