先看下面的例子:
PHP 代码
<?PHP
// 例子 1
function test_global() {
global $var1, $var2;
$var2 =& $var1;
}
function test_globals() {
$GLOBALS['var3'] =& $GLOBALS['var1'];
}
$var1 = 5;
$var2 = $var3 = 0;
test_global();
print $var2 ."n";
test_globals();
print $var3 ."n";
?>
履行效果为:
0
5
怎么会这样呢?不该当是 2 个 5 吗?怎么会出现 1 个 0 和 1 个 5 呢?
恩,我们保存以上问题,
深入 分析 $GLOBALS 和 global 的原理!
我们都知道变量其实是相应物理内存在代码中的"代号",
引用 PHP 手册的$GLOBALS
的解释 :Global 变量:$GLOBALS
由所有已定义全局变量组成的数组。变量名就是该数组的索引。
“
这是一个 superglobal”,或者可以描绘为主动全局变量。
也就是说上面代码中的$var1 和$GLOBALS['var1']是指的同一变量,而不是 2 个不同的变
量!
下面来分析 global 到底做了什么?
我们都知道 PHP
中的函数所产生 的变量都是函数的私有变量,那么 global 产生的变量也
确定逃不出这个规矩,为什么这么说呢,看下面的代码:
PHP 代码
<?PHP
function test() {
global $a;
unset($a);
}
$a = 1;
test();
print $a;
?>