时间:2021-07-01 10:21:17 帮助过:7人阅读
开发一个PHP程序,不可避免的要使用到全局数据.
全局变量便是其中之一,当然这个观点颇具争议,有许多人还是建议禁用全局变量,使用不当对造成程序的可读性很差!结构混乱,调试更是一头雾水,但是不可否认他的便捷,这便是php为什么会用全局变量global原因吧!…
今天就遇到了php 全局变量不起作用的问题.
先上一段简单的代码:
1 |
|
2 |
$a = 0 ; |
3 |
function Test() |
4 |
{ |
5 |
$a =1; |
6 |
} |
7 |
Test(); |
8 |
echo $a ; |
9 |
?> |
上面的代码中输出是0,那是因为函数体Test内$a变量被缺省设置为局部变量,$a的作用域就是在Test内.修改代码如下
01 |
|
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 |
|
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 |
|
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 |
|
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 |
|
17 |
function Test() |
18 |
{ |
19 |
global
$a ; |
20 |
$a
=1; |
21 |
} |
22 |
?> |
1 |
//A.php 文件 |
01 |
|
02 |
include 'B.php' ; |
03 |
$a =0; |
04 |
Set_Global( $a ); |
05 |
echo $a ; |
06 |
?> |
07 |
08 |
//B.php 文件 |
09 |
10 |
|
11 |
function Set_Global(& $var ) |
12 |
{ |
13 |
$var =1; |
14 |
} |
15 |
?> |