PHP中全局变量的使用global和$GLOBALS[]
From: http://blog.csdn.net/happyqyt/article/details/7219889
用PHP开发项目,不可避免的会使用到全局变量,比如一些网站的配置信息,全站通用,那就可以在一个地方设置,然后多个地方调用。
把变量定义为全局变量可以有两种方法:global和$GLOBALS[]。很多人都认为global和$GLOBALS[]只是写法不同而已,其实是有差别的。
先来看看global
php对global变量的解析是:global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
看一下下面一段PHP代码:
- $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
$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
- $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
$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[]
- $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
$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
- $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
$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的同名引用或者指针。
也许这个例子还不是很清晰,我再引入一个例子:
- $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 = 1;
function test1(){
unset($GLOBALS['var1']);
}
test1();
var_dump($var1); //NULL $var2 = 1;
function test2(){
global $var2;
unset($var2);
}
test2();
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 = 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[]的更多相关文章
- PHP中全局变量global和$GLOBALS[]的区别分析
$GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针 一.举例比较 例一: 复制代码 代码如下: <?php $var1 = 1; ...
- php中全局变量global和超全局变量$GLOBALS
php中全局变量global和超全局变量$GLOBALS 1.global Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require ...
- PHP中global与$GLOBALS['']的区别
+++ 探讨(一)+++++++++++++++++++++++++++++++++++++++ 很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然. 根据官方的解释是 $GL ...
- php中global与$GLOBALS的用法及区别-转载
php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...
- php中global与$GLOBALS的用法及区别
php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...
- php中global和$GLOBALS[]的分析之一
PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖 这可能引起一些问题,有些人可能漫不经心的改变一个全局变量.PHP 中全局变量在函数 ...
- (转)php中global和$GLOBALS[]的分析之一
PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖 这可能引起一些问题,有些人可能漫不经心的改变一个全局变量.PHP 中全局变量在函数中使 ...
- 【PHP】- 全局变量global和$GLOBALS的区别
1.global global关键字的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件. 但是在函数体内定义的global变量, ...
- PHP中global与$GLOBALS的区别
单一个global是一个关键字,通常附加在变量前,用于将变量声明至全局作用域: $GLOBALS是预定义的超全局变量,把变量扔到里边的话一样可以带到全局去. $GLOBALS 是一个关联数组,每一个变 ...
随机推荐
- 如何在 Django 中保证并发的数据一致性
1. 关于锁 1.1 乐观锁 乐观锁的出发点是,同一条数据很少会因为并发修改而产生冲突,适用于读多写少的场景,用以提高吞吐量. 实现方式,读取一个字段,执行处理逻辑,当需要更新数据时,再次检查该字段是 ...
- visual studio使用GitHub
最近使用github同步项目,非常方便.以后慢慢研究版本控制的用法. visual studio使用github看这篇教程,亲测可用
- 针对后台TCP服务F5健康检查配置
1.TCP-HALF-OPEN方式 TCP-HALF-OPEN的探测方式,实际是F5每隔一个固定的时间,发送一个SYN包给资源池pool中的一个member,等待服务器返回SYN_ACK,在收到SYN ...
- C#学习笔记(12)——三种方法操作XML
说明(2017-7-11 16:56:13): 原文地址: C#中常用的几种读取XML文件的方法 XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web. ...
- 网络构建入门技术(2)——IP子网划分
说明(2017-5-10 10:54:31): 1. 为什么要子网划分? 子网划分就是,网络位变长,主机位变短的过程.实际上就是将一个大网络,划分成多个小网络的过程. 目的就是为了解决IP地址不够用的 ...
- 基于HTML5手机登录注册表单代码
分享一款基于HTML5手机登录注册表单代码.这是一款鼠标点击注册登录按钮弹出表单,适合移动端使用.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=&qu ...
- Android ListView的使用(三)
前两节关于ListView的,已经使用了ArrayAdapter,SimpleAdapter了,两个比较基本的适配器 这里来用一个用的最多的一个适配器BaseAdapter. 还是先上效果图.大概和微 ...
- bzoj1103【POI2007】大都市meg
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1544 Solved: 776 [Submit][St ...
- SecureCRT ,可是进入模拟器后TAB键还是无法补全
SecureCRT是做网络,路由,交换机等设备的人都知道的工具 ,可是进入模拟器后TAB键还是无法补全,就很懊恼了. 设置步骤: 1)打开SecureCRT软件,选项—全局选项—常规—默认的会话设置— ...
- 防简单攻击iptables策略
#!/bin/sh IPTABLES=/sbin/iptables # clear $IPTABLES -F # if pkg type is allow, then accept #$IPTABLE ...