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

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

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

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

看一下下面一段PHP代码:

[php] view plaincopyprint?
  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
[php] view plaincopyprint?
  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[]

[php] view plaincopyprint?
  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
[php] view plaincopyprint?
  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的同名引用或者指针。

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

[php] view plaincopyprint?
  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 
[php] view plaincopyprint?
  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[]的区别分析

    一.举例比较  例一: <?php  $var1 = 1;  function test(){  unset($GLOBALS['var1']);  }  test();  echo $var1 ...

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

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

  3. php的globle超全局变量,php中全局变量global和超全局变量$GLOBALS

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

  4. Php global echo,php中global和$GLOBALS[]的分析之一

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

  5. php中global什么意思,php中global和$GLOBALS[]的用法、解释、区别

    php语法中,很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然 根据官方的解释是 1.$GLOBALS['var']是外部的全局变量本身 2.global $var是外部$v ...

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

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

  7. 和php区别_PHP中global与$GLOBALS的区别

    php中文网最新课程 每日17点准时技术干货分享 概念 单一个global是一个关键字,通常附加在变量前,用于将变量声明至全局作用域: $GLOBALS是预定义的超全局变量,把变量扔到里边的话一样可以 ...

  8. PHP中global与$GLOBALS的区别

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

  9. php全局变量global和$GLOBALS

    global和$GLOBALS的使用,global $a;$a='hello';$GLOBALS['a']='hello';$GLOBALS必须在指定时就要赋值操作. 转载于:https://www. ...

最新文章

  1. 迎接奥运会 里约把机场的IT建设翻新了下
  2. VTK:相互作用之WorldPointPicker
  3. IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的...
  4. UVA12325Zombie's Treasure Chest 宝箱
  5. 区块链软件公司:区块链使用程序如何成为战胜商场应战的垫脚石
  6. [蓝桥杯2018初赛]分数-找规律
  7. jvm上的随机数与熵_向您的JVM添加一些熵
  8. 当年资本家倒掉牛奶,到底是怎么回事?
  9. 史上最全面的程序员招聘建议
  10. 推荐一个腾讯大神的免费直播课!
  11. ML-Visuals机器学习、深度学习绘图模板素材分享
  12. VirtualBox中,LINUX与Windows可以通过链接来跳转
  13. 【备注】【C11】《Android游戏编程之从零开始》PDF 下载
  14. [转]国外英语教学网页
  15. 如何制作一个横版格斗过关游戏_AppStore限免推荐丨加油打工人 竞速+横版格斗2款游戏陪你过周末?_手机游戏...
  16. Host Windows 配置
  17. 数组的扁平化方法总结
  18. OpenCV笔记02:用cv2.imread函数读取图片
  19. mysql判断表是否为空_quot;他为什么对我这么好?”:一张测量表判断男生是否喜欢你!...
  20. vs调试时,没有断点在某处停下

热门文章

  1. 【pl/sql番外篇】 存储过程 游标
  2. Java 源码赏析 - java.lang - Void
  3. [4]Telerik Grid 简单使用方法
  4. Spring.NET学习笔记12——面向切面编程(基础篇) Level 300
  5. WindowsXP命令行修改服务启动选项
  6. itchat 道歉_人类的“道歉”
  7. rabbitmq 不同的消费者消费同一个队列_RabbitMQ 消费端限流、TTL、死信队列
  8. 柠檬工会_工会经营者
  9. 推箱子2-向右推!_保持冷静,砍箱子-银行
  10. web开发入门_Web开发人员和设计师的自由职业入门