background image

先看下面的例子:
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;
   ?>