PHP中global与¥GLOBALS[]差别
程序员文章站
2024-01-03 15:26:58
...
PHP中global与¥GLOBALS[]区别
开发一个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内….
解决方案:
1. 冲出局部函数
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 |
?>
|
2.优秀的访问器
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 |
?>
|
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
- 最新文章
- 热门排行
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论