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

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

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

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

看一下下面一段PHP代码:

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

  1. $var1=1;
  2. $var2=2;
  3. function test1(){
  4. $GLOBALS['var2']=&$GLOBALS['var1'];
  5. }
  6. test1();
  7. echo $var2;  //1
  8. $var3=1;
  9. $var4=2;
  10. function test2(){
  11. global $var3,$var4;
  12. $var4=&$var3;
  13. }
  14. test2();
  15. 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
  1. $var1 = 1;
  2. $var2 = 2;
  3. function test1(){
  4. $GLOBALS['var2'] = &$GLOBALS['var1'];
  5. }
  6. test1();
  7. echo $var2;  //1
  8. $var3 = 1;
  9. $var4 = 2;
  10. function test2(){
  11. global $var3,$var4;
  12. $var4 = &$var3;
  13. }
  14. test2();
  15. 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的同名引用或者指针。

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

  1. $var1 = 1;
  2. function test1(){
  3. unset($GLOBALS['var1']);
  4. }
  5. test1();
  6. var_dump($var1);   //NULL
  7. $var2 = 1;
  8. function test2(){
  9. global  $var2;
  10. unset($var2);
  11. }
  12. test2();
  13. 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
  1. $var1 = 1;
  2. function test1(){
  3. unset($GLOBALS['var1']);
  4. }
  5. test1();
  6. var_dump($var1);   //NULL
  7. $var2 = 1;
  8. function test2(){
  9. global  $var2;
  10. unset($var2);
  11. }
  12. test2();
  13. 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'],调用外部变量的一个别名而已!

PHP中全局变量的使用global和$GLOBALS[]的更多相关文章

  1. PHP中全局变量global和$GLOBALS[]的区别分析

    $GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针     一.举例比较 例一: 复制代码 代码如下: <?php $var1 = 1; ...

  2. php中全局变量global和超全局变量$GLOBALS

    php中全局变量global和超全局变量$GLOBALS 1.global Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require ...

  3. PHP中global与$GLOBALS['']的区别

    +++ 探讨(一)+++++++++++++++++++++++++++++++++++++++ 很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然. 根据官方的解释是 $GL ...

  4. php中global与$GLOBALS的用法及区别-转载

    php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...

  5. php中global与$GLOBALS的用法及区别

    php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...

  6. php中global和$GLOBALS[]的分析之一

    PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖       这可能引起一些问题,有些人可能漫不经心的改变一个全局变量.PHP 中全局变量在函数 ...

  7. (转)php中global和$GLOBALS[]的分析之一

    PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖     这可能引起一些问题,有些人可能漫不经心的改变一个全局变量.PHP 中全局变量在函数中使 ...

  8. 【PHP】- 全局变量global和$GLOBALS的区别

    1.global global关键字的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件. 但是在函数体内定义的global变量, ...

  9. PHP中global与$GLOBALS的区别

    单一个global是一个关键字,通常附加在变量前,用于将变量声明至全局作用域: $GLOBALS是预定义的超全局变量,把变量扔到里边的话一样可以带到全局去. $GLOBALS 是一个关联数组,每一个变 ...

随机推荐

  1. 正益无线首页jQuery焦点图

    分享一款正益无线首页jQuery焦点图,带索引按钮,自动轮播切换特效焦点图代码. 在线预览   源码下载 实现的代码. html代码: <div id="slideBox" ...

  2. java基础篇---网络编程(TCP程序设计)

    TCP程序设计 在Java中使用Socket(即套接字)完成TCP程序的开发,使用此类可以方便的建立可靠地,双向的,持续的,点对点的通讯连接. 在Socket的程序开发中,服务器端使用serverSo ...

  3. [转]JSP中EL表达式三元运算符的使用

    原文地址:http://www.guance.com/469.html Java中的三元运算符为:条件?条件为true值:条件为false的值EL也有一样的运算符,用EL的三元运算符有时可以代替c:c ...

  4. swift,NSUserDefaults的swift化封装

    NSUserDefaultshtml, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror- ...

  5. linux中注册系统服务—service命令的原理通俗

    能够使用service命令进行操作的,就是已经注册成为linux的系统服务了.window中也可以注册成为系统服务的办法. service命令用的次数真不少,就是比较多的关联点,用了很多次了,还是有些 ...

  6. 【Unity】协程Coroutine及Yield常见用法

    最近学习协程Coroutine,参考了别人的文章和视频教程,感觉协程用法还是相当灵活巧妙的,在此简单总结,方便自己以后回顾.Yield关键字的语意可以理解为“暂停”. 首先是yield return的 ...

  7. C# DIctionary:集合已修改,可能无法执行枚举操作

    C#中直接对集合Dictionary进行遍历并修改其中的值,会报错,如下代码就会报错:集合已修改;可能无法执行枚举操作.代码如下 public void ForeachDic() { Dictiona ...

  8. <黑天鹅>读书笔记

    书在这里 不要关注可能性,而要关注结果 不要迷信那些估值和行业发展研究文字,因为所有大家看得到的模型和研究报告都是有关白天鹅的,而你的命运或许实际掌握在黑天鹅那里 你不知道的事比你知道的事有意义 你可 ...

  9. android 技术点记录

    Android Service完全解析,关于服务你所需知道的一切(上) http://blog.csdn.net/guolin_blog/article/details/11952435 androi ...

  10. CycleGAN 各种变变变

    转载自 简单介绍了一下GAN和DCGAN的原理.以及如何使用Tensorflow做一个简单的生成图片的demo. Ian Goodfellow对GAN一系列工作总结的ppt,确实精彩,推荐:独家 | ...