概论为什么PHP全局变量不能生效
但在实际操作时,会接连碰到几次全局变量无效的郁闷的事,下面就重点看一下PHP全局变量不能生效的原因及解决办法。
1.PHP全局变量不能生效错误重现
问题出现在用我的简易框架时,在view中使用原来第三方定义好的函数时(此函数比较独立),下面模拟一下:
t1.php
- ?
- run(); //执行
- function run(){
- include 'func.php';
- showGlobal();
- }
- ?>
func.php1
- ?
- $vars = 'I am global!';
- function showGlobal(){
- global $vars;
- print('我使用全局变量:'.$vars);
- }
- ?>
很简单的两个文件(第一次发现问题时,远比这复杂,在一层层排错后,得出最少化的问题重现环境),func.php是定义好的第三方函数,该函数使用了一些全局变量,如果这时把这两个文件放在一起,执行一下t1.php,会发现showGlobal里的$vars是显示不出来的,global失效了?
2.PHP全局变量不能生效错误原因
搜索后发现,php.net上很早就有人提出过,也有人给出了解释:
原来,在t1.php的run函数中include func.php时,func.php中的变量$vars的作用域只是在run之内,而在showGlobal中使用global声明的$vars是要求属于t1.php的不是run函数的,所以为空)
3.PHP全局变量不能生效解决方法
知道原因后,解决就很简单,可以把include 从run中移出来,这样,func.php中的$vars就属于t1.php了;也可以在run里用global声明一下$vars,这样也可以把原来属于run的$vars声明为全局(属于t1.php);
虽然问题可以简决,但用起来还是很不爽, 因为在我的phpec框架中,include的情况比较普遍,不可能把view中按需include的移到外层去,使用global的话,我在使用第三方函数时,又不会也不想去了解它用了什么全局变量,而且,层次结构一多,就….
PHP全局变量不能生效的原因总结:
1)尽量减少多级和函数中include文件.
2)尽量不用全局变量
推荐阅读
-
概论为什么PHP全局变量不能生效
-
php 项目为什么在服务器下不能获取远程网页的内容
-
php与mysql分页问题,为什么别的界面都能用单独这个的下一页不能用,这么写有问题,该怎样修改
-
php5中_autoload()的步骤为什么不能使用呢
-
php 项目为什么在服务器下不能获取远程网页的内容
-
php中echo跟header("content-type:text/html; charset=uft-8");为什么不能一起用
-
为什么小弟我的本地环境不能解析子目录下的PHP文件
-
php-PHP:用httpd.conf设置虚拟路径,为什么我这样作了之后仍不能访问呢
-
php为什么在for循环中链接符不能用呢,请指教
-
用elasticsearch-php laravel为什么不能返回高亮数据?