PHP中global与¥GLOBALS[]区别
开发一个PHP程序,不可避免的要使用到全局数据.
全局变量便是其中之一,当然这个观点颇具争议,有许多人还是建议禁用全局变量,使用不当对造成程序的可读性很差!结构混乱,调试更是一头雾水,但是不可否认他的便捷,这便是php为什么会用全局变量global原因吧!…
今天就遇到了php 全局变量不起作用的问题.
先上一段简单的代码:
1 |
<?php |
2 |
$a = 0 ;
|
3 |
function Test()
|
4 |
{ |
5 |
$a =1;
|
6 |
} |
7 |
Test(); |
8 |
echo $a ;
|
9 |
?> |
上面的代码中输出是0,那是因为函数体Test内$a变量被缺省设置为局部变量,$a的作用域就是在Test内.修改代码如下
01 |
<?php |
02 |
$a = 0 ;
|
03 |
function Test()
|
04 |
{ |
05 |
global $a ; //申明函数体Test内使用的$a变量为global全局变量
|
06 |
$a =1;
|
07 |
} |
08 |
Test(); |
09 |
echo $a ;
|
10 |
?> |
申明函数体Test内使用的$a变量为global全局变量后,使得$a的作用全局,所以输出为1.
上面的实例只是基本的global全局变量知识,下面我们看看复杂点的:
01 |
//A.php 文件 |
02 |
03 |
<?php |
04 |
function Test_Global()
|
05 |
{ |
06 |
include 'B.php' ;
|
07 |
Test(); |
08 |
} |
09 |
10 |
$a = 0 ;
|
11 |
Test_Global(); |
12 |
echo $a ;
|
13 |
?> |
14 |
15 |
//B.php 文件 |
16 |
17 |
<?php |
18 |
function Test()
|
19 |
{ |
20 |
global $a ; //申明函数体Sum内使用的$a变量为global全局变量
|
21 |
$a =1;
|
22 |
} |
23 |
?> |
为什么输出的却是0?!!
在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内(包括include 和 require 导入的文件内的变量)!
解释:A.php文件的内Test_Global是定义好的第三方函数,该函数用include导入了B.php文件内的$a的global全局变量,所以$a被限制在Test_Global局部函数范围内,所以B.php文件内的$a的作用范围都在Test_Global内,而不是作用了整个A.php内….
01 |
//A.php 文件
|
02 |
03 |
<?php |
04 |
function Test_Global()
|
05 |
{ |
06 |
Test(); |
07 |
} |
08 |
include 'B.php' ; //将include 从局部Test_Global函数中移出
|
09 |
$a = 0 ;
|
10 |
Test_Global(); |
11 |
echo $a ;
|
12 |
?> |
13 |
14 |
//B.php 文件 |
15 |
16 |
<?php |
17 |
function Test()
|
18 |
{ |
19 |
global $a ;
|
20 |
$a =1;
|
21 |
} |
22 |
?>
|
1 |
//A.php 文件
|
01 |
<?php |
02 |
include 'B.php' ;
|
03 |
$a =0;
|
04 |
Set_Global( $a );
|
05 |
echo $a ;
|
06 |
?> |
07 |
08 |
//B.php 文件 |
09 |
10 |
<?php |
11 |
function Set_Global(& $var )
|
12 |
{ |
13 |
$var =1;
|
14 |
} |
15 |
?>
|