我在php.net上阅读这篇文章:
"当您将变量声明为global $var
时,您实际上正在创建对全局变量的引用。这意味着,这与:
<?php
$var =& $GLOBALS["var"];
?>
这也意味着取消设置$var
不会取消设置全局变量。&#34;
我从中理解的是,当您将变量声明为global $var
时,您为变量名称$ GLOBALS [&#34; var&#34;]设置了另一个名称。所以如果你回应一个或那个,你会得到同样的东西。但我发现最后一句话令人困惑,因为以下代码段输出&#39; red&#39;:
$GLOBALS['var']='blue';
global $var; //This is supposed to be equivalent to $var=& $GLOBALS["var"];
//echo $var,'<br/>';
$var='red';
echo $GLOBALS['var']; //I would expect this to output 'blue', instead of 'red'
我期待输出为蓝色&#39;因为它声明取消设置$var
不会取消设置全局变量。错误在哪里?
如果我unset($var)
,我应该如何检查全局变量是否未设置?
答案 0 :(得分:2)
$var='red';
它不是不安定的,它的分配。 Assigment会影响全局变量。
这也意味着取消设置$ var不会取消设置全局变量。
关于使用unset
功能。 unset($var)
从当前范围中删除变量,但全局变量仍然存在。
答案 1 :(得分:1)
您需要了解您错过了那个小细节&
。这样做,是说你想要original reference而不是变量的副本。
function test() {
$var = $GLOBALS['x'];
$var2 = &$GLOBALS['x'];
echo $GLOBALS['x'] . "\n";
$var2 = 'red';
echo $var . "\n" . $GLOBALS['x'];
}
$x = 'blue';
test();
此输出
blue
red
您会注意到$var
已分配给全局版本,但发生的事情只是PHP 复制 $x
。使用$var2
,我们告诉PHP我们想要引用,换句话说,我想要$x
的实际地址。这会产生巨大的差异,因为$var
只是一个副本。更改它只会更改副本。请注意,在我的示例中,我更改了$x
的值,但只有$var2
反映了该更改。 $var
仍然具有$x
开头的内容。