PHP中全局变量的使用global和$GLOBALS[]
2015-11-25 19:01
846 查看
From: http://blog.csdn.net/happyqyt/article/details/7219889
用PHP开发项目,不可避免的会使用到全局变量,比如一些网站的配置信息,全站通用,那就可以在一个地方设置,然后多个地方调用。
把变量定义为全局变量可以有两种方法:global和$GLOBALS[]。很多人都认为global和$GLOBALS[]只是写法不同而已,其实是有差别的。
先来看看global
php对global变量的解析是:global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
看一下下面一段PHP代码:
[php] view plaincopyprint?
$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?
$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?
$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?
$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?
$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?
$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[]。很多人都认为global和$GLOBALS[]只是写法不同而已,其实是有差别的。
先来看看global
php对global变量的解析是:global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
看一下下面一段PHP代码:
[php] view plaincopyprint?
$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
[php] view plaincopyprint?
$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[]
[php] view plaincopyprint?
$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
[php] view plaincopyprint?
$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的同名引用或者指针。
也许这个例子还不是很清晰,我再引入一个例子:
[php] view plaincopyprint?
$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
[php] view plaincopyprint?
$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代码实现强制换行
- PHP图片添加水印
- phonegap-详解navigator.camera.getPicture
- itms-services协议:跳转网页部署及PHP动态生成 iOS渠道包IPA一键安装之plist
- 用ext_skel,实现一个PHP扩展,添加到PHP并调用
- php 错误调试的认知
- thinkphp关于在部署环境下增加数据库字段的问题
- 在windows下添加php的Imagick扩展
- Phpstorm如何新建项目在共享文件夹中
- 申请TexturePacker免费注册码(TP:FF7D2841)
- PHP 浮点数计算比较及取整不准确的解决方法
- PHPExcel读取excel并导入数据库
- PHP mysql 两个数据库的表连接查询
- 写一个PHP扩展
- yii的csv导出
- ThinkPHP 3.2中vendor()方法的深入研究及PHPMailer的正确扩展
- Windows Server 2003搭建FTP服务器 实现盘符之间切换
- PHP05
- [算法]PHP随机合并数组并保持原排序
- 解决ubuntu挂载NTFS磁盘时出现input/output error