概论为什么PHP全局变量不能生效

开发 后端
我们应当通过尽量减少多级和函数中include文件来防范PHP全局变量不能生效这一问题。实在不行,我们就尽量不用全局变量。

对于一个新手在实际操作PHP语言定义一个全局变量的时候,往往会出现很多问题。比如,他们会一直以为,全局变量(使用global声明)是在程序的所有地方都可以用的(不然怎么能叫全局?呵)。#t#

但在实际操作时,会接连碰到几次全局变量无效的郁闷的事,下面就重点看一下PHP全局变量不能生效的原因及解决办法。

1.PHP全局变量不能生效错误重现

问题出现在用我的简易框架时,在view中使用原来第三方定义好的函数时(此函数比较独立),下面模拟一下:

t1.php

  1. < ?  
  2. run(); //执行  
  3. function run(){  
  4. include 'func.php';  
  5. showGlobal();  
  6. }  
  7. ?> 

 

func.php1

  1. < ?  
  2. $vars = 'I am global!';  
  3. function showGlobal(){  
  4. global $vars;  
  5. print('我使用全局变量:'.$vars);  
  6. }  
  7. ?> 

 

很简单的两个文件(第一次发现问题时,远比这复杂,在一层层排错后,得出最少化的问题重现环境),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)尽量不用全局变量

责任编辑:曹凯 来源: etang.info
相关推荐

2009-12-09 17:07:08

PHP unset全局

2009-12-04 13:14:19

PHP Global变

2014-06-23 10:25:12

2013-07-17 16:16:06

Android全局变量定义全局变量Application

2013-07-25 15:15:26

iOS开发学习iOS全局变量

2010-11-12 10:08:55

SQL Server全

2013-07-22 14:07:47

2010-03-09 14:12:55

Python全局变量

2010-02-01 14:28:37

Python全局变量

2009-09-24 09:28:00

Scala讲座全局变量scala

2009-11-06 13:28:19

Javascript框

2015-01-07 14:41:32

Android全局变量局部变量

2021-02-26 13:42:01

函数全局变量

2017-02-08 12:28:37

Android变量总结

2011-08-23 13:54:10

LUA全局变量

2010-09-08 17:25:17

SQL全局变量

2022-11-28 11:15:20

Tomcat回显方式

2023-09-24 23:40:54

Python变量

2022-04-12 11:38:06

C语言全局变量

2020-11-09 14:10:38

Bug安全代码
点赞
收藏

51CTO技术栈公众号