PHP 全局变量global详解
2016-07-20 00:00
447 查看
开发一个PHP程序,不可避免的要使用到全局数据.
全局变量便是其中之一,当然这个观点颇具争议,有许多人还是建议禁用全局变量,使用不当对造成程序的可读性很差!结构混乱,调试更是一头雾水,但是不可否认他的便捷,这便是php为什么会用全局变量global原因吧!…
今天就遇到了php 全局变量不起作用的问题.
先上一段简单的代码:
上面的代码中输出是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 全局变量不起作用的问题.
先上一段简单的代码:
<?php $a = 0 ; function Test() { $a =1; } Test(); echo $a; ?>
上面的代码中输出是0,那是因为函数体Test内$a变量被缺省设置为局部变量,$a的作用域就是在Test内.修改代码如下
<?php $a = 0 ; function Test() { global $a;//申明函数体Test内使用的$a变量为global全局变量 $a =1; } Test(); echo $a; ?>
申明函数体Test内使用的$a变量为global全局变量后,使得$a的作用全局,所以输出为1.
上面的实例只是基本的global全局变量知识,下面我们看看复杂点的:
//A.php 文件 <?php function Test_Global() { include 'B.php'; Test(); } $a = 0 ; Test_Global(); echo $a; ?> //B.php 文件 <?php function Test() { global $a;//申明函数体Sum内使用的$a变量为global全局变量 $a =1; } ?>
为什么输出的却是0?!!
在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内(包括include 和 require 导入的文件内的变量)!
解释:A.php文件的内Test_Global是定义好的第三方函数,该函数用include导入了B.php文件内的$a的global全局变量,所以$a被限制在Test_Global局部函数范围内,所以B.php文件内的$a的作用范围都在Test_Global内,而不是作用了整个A.php内….
解决方案:
1. 冲出局部函数
//A.php 文件 <?php function Test_Global() { Test(); } include 'B.php'; //将include 从局部Test_Global函数中移出 $a = 0 ; Test_Global(); echo $a; ?> //B.php 文件 <?php function Test() { global $a; $a =1; } ?>
2.优秀的访问器
<?php include 'B.php'; $a =0; Set_Global($a); echo $a; ?> //B.php 文件 <?php function Set_Global(&$var) { $var=1; } ?>
相关文章推荐
- PHP 数组处理的函数
- PHP 字符串处理的函数
- PHP5 中魔术方法函数
- phpStrom&webStorm证书码
- PHP 中 implode() explode() 解析
- Yii2安装
- 【PHP面向对象(OOP)编程入门教程】9.封装性(var与public,protected,private的关系)
- PHP+ExtJS 文件上传示例
- PHP中的正则
- 解决ThinkPHP 3.2.3 引入后台模板访问不成功
- ThinkPHP 3.2.3 后台模板引入
- WebStorm, PhpStorm破解
- 在ubuntu下运行的简单php脚本【生猴子】
- yii2.0验证码不能随网页一起刷新/出现site/captcha的错误
- laravel 怎么部署到万网的虚拟主机上?
- 修改wampserver的www目录及phpMyadmin问题解决
- windows版的php如何开启openssl
- php使用Mailer实现发送邮件
- 如何选择PHP框架?
- php正则与入门正则搭配