博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP中全局变量的使用global和$GLOBALS[]
阅读量:5895 次
发布时间:2019-06-19

本文共 3222 字,大约阅读时间需要 10 分钟。

From: http://blog.csdn.net/happyqyt/article/details/7219889

 

用PHP开发项目,不可避免的会使用到全局变量,比如一些网站的配置信息,全站通用,那就可以在一个地方设置,然后多个地方调用。

把变量定义为全局变量可以有两种方法:global和$GLOBALS[]。很多人都认为global和$GLOBALS[]只是写法不同而已,其实是有差别的。

 

先来看看global

php对global变量的解析是:global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。

看一下下面一段PHP代码:

[php]
  1. $a=123;  
  2. function test1(){  
  3.     global $a;  //如果不把$a定义为global变量,函数体内是不能访问$a的   
  4.     echo $a;  //123   
  5. }  
  6. test1();  
  7.   
  8. global $b;  
  9. $b = 456;  
  10. function test2(){  
  11.     var_dump($b);  //NULL   
  12. }  
  13. test2();  
  14.   
  15. function test3(){  
  16.     global $c;  
  17.     $c=789;  
  18. }  
  19. test3();  
  20. echo $c;  //789  
$a=123;function test1(){    global $a;  //如果不把$a定义为global变量,函数体内是不能访问$a的    echo $a;  //123}test1();global $b;$b = 456;function test2(){    var_dump($b);  //NULL}test2();function test3(){    global $c;    $c=789;}test3();echo $c;  //789

 

[php]
  1. $a=123;  
  2. function test1()  
  3. {  
  4. global $a;   //如果不把$a定义为global变量,函数体内是不能访问$a的   
  5. echo $a; //123   
  6. }  
  7. test1();  
  8.   
  9. global $b;  
  10. $b=456;  
  11. function test2()  
  12. {  
  13. var_dump($b);    //NULL   
  14. }  
  15. test2();  
  16.   
  17. function test3()  
  18. {  
  19. global $c;  
  20. $c=789;  
  21. }  
  22. test3();  
  23. echo $c;   //789  
$a=123;function test1(){global $a;   //如果不把$a定义为global变量,函数体内是不能访问$a的echo $a; //123}test1();global $b;$b=456;function test2(){var_dump($b);    //NULL}test2();function test3(){global $c;$c=789;}test3();echo $c;   //789
通过代码得出总结:在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用。

 

 

再来看看$GLOBALS[]

[php]
  1. $var1=1;  
  2. $var2=2;  
  3. function test1(){  
  4.     $GLOBALS['var2']=&$GLOBALS['var1'];  
  5. }  
  6. test1();  
  7. echo $var2;  //1   
  8.   
  9. $var3=1;  
  10. $var4=2;  
  11. function test2(){  
  12.     global $var3,$var4;  
  13.     $var4=&$var3;  
  14. }  
  15. test2();  
  16. echo $var4;  //2  
$var1=1;$var2=2;function test1(){    $GLOBALS['var2']=&$GLOBALS['var1'];}test1();echo $var2;  //1$var3=1;$var4=2;function test2(){    global $var3,$var4;    $var4=&$var3;}test2();echo $var4;  //2

 

[php]
  1. $var1 = 1;    
  2. $var2 = 2;    
  3. function test1(){    
  4.      $GLOBALS['var2'] = &$GLOBALS['var1'];    
  5. }    
  6. test1();    
  7. echo $var2;  //1   
  8.   
  9. $var3 = 1;    
  10. $var4 = 2;    
  11. function test2(){    
  12.      global $var3,$var4;    
  13.      $var4 = &$var3;    
  14. }    
  15. test2();    
  16. echo $var4;   //2  
$var1 = 1;  $var2 = 2;  function test1(){       $GLOBALS['var2'] = &$GLOBALS['var1'];  }  test1();  echo $var2;  //1$var3 = 1;  $var4 = 2;  function test2(){       global $var3,$var4;       $var4 = &$var3;  }  test2();  echo $var4;   //2
为什么$var2的打印结果是1,而$var4的打印结果为2呢?其实就是因为$var4的引用指向了$var3的引用地址。$var4的实际值并没有改变。官方的解释是:$GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针。

 

 

也许这个例子还不是很清晰,我再引入一个例子:

[php]
  1. $var1 = 1;      
  2. function test1(){      
  3.      unset($GLOBALS['var1']);      
  4. }      
  5. test1();      
  6. var_dump($var1);   //NULL     
  7.   
  8. $var2 = 1;      
  9. function test2(){      
  10.     global  $var2;      
  11.      unset($var2);      
  12. }      
  13. test2();      
  14. echo $var2;   //1   
$var1 = 1;    function test1(){         unset($GLOBALS['var1']);    }    test1();    var_dump($var1);   //NULL  $var2 = 1;    function test2(){        global  $var2;         unset($var2);    }    test2();    echo $var2;   //1
[php]
  1. $var1 = 1;    
  2. function test1(){    
  3.      unset($GLOBALS['var1']);    
  4. }    
  5. test1();    
  6. var_dump($var1);   //NULL   
  7.   
  8. $var2 = 1;    
  9. function test2(){    
  10.     global  $var2;    
  11.      unset($var2);    
  12. }    
  13. test2();    
  14. echo $var2;   //1  
$var1 = 1;  function test1(){       unset($GLOBALS['var1']);  }  test1();  var_dump($var1);   //NULL$var2 = 1;  function test2(){      global  $var2;       unset($var2);  }  test2();  echo $var2;   //1

$var1的值被删除,而$var2的值还存在。这就证明,$var2只是别名引用,本身的值没有受到任何的改变。

也就是说global $var其实就是$var = &$GLOBALS['var'],调用外部变量的一个别名而已!

你可能感兴趣的文章
Android NDK入门实例 计算斐波那契数列一生成jni头文件
查看>>
c/c++性能优化--I/O优化(上)
查看>>
将HTML特殊转义为实体字符的两种实现方式
查看>>
System.Func<>与System.Action<>
查看>>
asp.net开源CMS推荐
查看>>
csharp skype send message in winform
查看>>
MMORPG 游戏服务器端设计--转载
查看>>
SILK 的 Tilt的意思
查看>>
Html学习笔记3
查看>>
HDFS dfsclient写文件过程 源码分析
查看>>
部署P2P升级的脚本
查看>>
ubuntu下安装libxml2
查看>>
nginx_lua_waf安装测试
查看>>
WinForm窗体缩放动画
查看>>
JQuery入门(2)
查看>>
linux文件描述符
查看>>
C++ const 详解
查看>>
传值引用和调用引用的区别
查看>>
Hive简介
查看>>
hyper-v 无线网连接
查看>>