PHP 全局变量global详解
2012-11-23 16:56
567 查看
开发一个PHP程序,不可避免的要使用到全局数据.
全局变量便是其中之一,当然这个观点颇具争议,有许多人还是建议禁用全局变量,使用不当对造成程序的可读性很差!结构混乱,调试更是一头雾水,但是不可否认他的便捷,这便是php为什么会用全局变量global原因吧!…
今天就遇到了php全局变量不起作用的问题.
先上一段简单的代码:
view
source
print?
上面的代码中输出是0,那是因为函数体Test内$a变量被缺省设置为局部变量,$a的作用域就是在Test内.修改代码如下
申明函数体Test内使用的$a变量为global全局变量后,使得$a的作用全局,所以输出为1.
上面的实例只是基本的global全局变量知识,下面我们看看复杂点的:
为什么输出的却是0?!!
在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内(包括include和require导入的文件内的变量)!
解释:A.php文件的内Test_Global是定义好的第三方函数,该函数用include导入了B.php文件内的$a的global全局变量,所以$a被限制在Test_Global局部函数范围内,所以B.php文件内的$a的作用范围都在Test_Global内,而不是作用了整个A.php内….
全局变量便是其中之一,当然这个观点颇具争议,有许多人还是建议禁用全局变量,使用不当对造成程序的可读性很差!结构混乱,调试更是一头雾水,但是不可否认他的便捷,这便是php为什么会用全局变量global原因吧!…
今天就遇到了php全局变量不起作用的问题.
先上一段简单的代码:
view
source
1 | <?php |
2 | $a = 0; |
3 | function Test() |
4 | { |
5 | $a =1; |
6 | } |
7 | Test(); |
8 | echo $a ; |
9 | ?> |
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 | ?> |
上面的实例只是基本的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 | ?> |
在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内(包括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 | <?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 | ?> |
2.优秀的访问器
01 | //A.php 文件 |
02 | <?php |
03 | include 'B.php' ; |
04 | $a =0; |
05 | Set_Global( $a ); |
06 | echo $a ; |
07 | ?> |
08 |
09 | //B.php 文件 |
10 |
11 | <?php |
12 | function Set_Global(& $var ) |
13 | { |
14 | $var =1; |
15 | } |
16 | ?> |
相关文章推荐
- PHP 全局变量global详解
- PHP 全局变量global详解
- PHP 全局变量global与$GLOBAL大详解
- php 全局变量global的使用方法
- PHP中全局变量global和$GLOBALS[]的区别分析
- PHP Global变量定义当前页面的全局变量
- php中的全局变量global(低级错误啊)
- PHP Global定义全局变量使用说明
- 【php】global的使用与php的全局变量
- PHP中全局变量global和$GLOBALS[]的区别分析
- PHP Global定义全局变量使用说明
- PHP学习:PHP超全局变量(Superglobal)$GLOBALS的介绍以及和global的区别
- PHP Global变量定义当前页面的全局变量实现探讨
- PHP超全局变量$_ENV详解,及$_ENV为空的可能原因
- PHP Global变量定义当前页面的全局变量
- php中的全局变量$GLOBALS与global的区别
- php global 全局变量使用
- PHP 的 全局变量 global 和 超全局变量 $GLOBAL - 只需一篇你就明白
- PHP Global定义全局变量使用说明
- [PHP]全局变量:global与$GLOBALS的区别和使用