问题
为什么全局和$GLOBALS之间的 unset 函数不同?
这是我的代码,$GLOBALS
版本不会回显任何内容,但global
会回显"Hi"。
//$GLOBALS version
<?php
function foo()
{
unset($GLOBALS['bar']);
}
$bar ="hi";
foo();
echo $bar;
?>
上面的代码没有回显任何内容
但是当我$GLOBALS['bar']
更改为global $bar
时,它会回响"嗨">
//global version
<?php
function foo()
{
global $bar;
unset($bar);
}
$bar = "hi";
foo();
echo $bar;
?>
<小时 />我在谷歌和php手册中有搜索,但似乎没有关于这个问题的细节。GLOBALS和全球有什么区别?
使用 global
语句在函数作用域内导入的真正全局变量实际上会创建对全局变量的引用。 使用 unset()
时,它会取消设置引用全局变量的变量,与其他引用相同。取消设置引用时,只需断开变量名称和变量内容之间的绑定。这并不意味着变量内容将被销毁。例如:
$a = 1;
//assign a reference to $a
$b =& $a;
unset($b);
var_dump($a);
产量:int(1)
请参阅取消设置引用。
当您访问$GLOBALS
时,您正在访问一个超全局数组并取消设置数组中包含的实际变量。