您的位置:首页 > 编程语言 > PHP开发

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

$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'],调用外部变量的一个别名而已!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: