您好,欢迎访问一九零五行业门户网

PHP中global全局变量的作用范围_PHP教程

最近在开发一个discuz!插件,今天遇到一个问题,我在后台的一个函数中调用插件的变量数据时返回空值,测试几次无果后突然想起应该是没有加载缓存导致的,于是加入了loadcache(\'plugin\')加载插件缓存。可是问题依旧。
分析一下问题,需要调用到到数据的是一个函数(暂且称为函数a),已经执行了global $_g;以调用全局变量,而且通过print_r输出$_g也证实$_g中是有数据的,缺失的是插件缓存。而函数a在前台也要调用,因为前台套了plugin.php的外壳,已经加载插件缓存,不需要执行loadcache('plugin'),因此在函数中执行loadcache('plugin')操作对执行效率有影响。
再次分析问题,后台调用函数a的代码则在另一个函数中(暂且称为函数b),突然在想,会不会要在这个函数里执行一次global $_g;好让后台加载的变量内容由函数b传递给函数a?
抱着试一试的态度,我在函数b中也添加了global $_g;,结果成功了!
这引申出了一个global作用域的作用范围的问题。在我这次调试中,函数a因为由函数b调用,因此后台中调用的loadcache('plugin');所生成的新$_g只在后台部分有效,而函数b中由于没有使用global $_g,因此并未获取到最新的$_g。而函数a的文件引用(require)我写在了函数b中,函数a成了函数b的一个子集,后台代码中运行过loadcache的全局变量对函数a无效,函数a中的global取得的$_g值绕开了我所写的loadcache。因此需要在函数b中运行一次global获得最新的$_g值才能在函数a中生效。
下面是一个使用“global”关键字的演示例子:
 代码如下 复制代码
正如你在上面的例子中看到的一样,“global”关键字是用来导入全局变量的。看起来它工
作的很好,而且很简单,那么为什么我们还要担心使用“global”关键字来定义全局数据呢
我来给处入行的人讲解一下全局变量global的使用,”全局变量“,这个名词中的全局两个
字已经告诉我们这个变量在各个地方都能用,先看一个实例:
 代码如下 复制代码
结果: 3
如果没有全局变量global在方法内是不能获得$a,$b值的,所以在方法里面想用外面的变量就
需要先声明这个变量为全局变量,这样就可以使用了,很方便吧。
 代码如下 复制代码
以上脚本的输出将是“3”。在函数中申明了全局变量 $w3sky 和 $w3sky2,任何变量的所有
引用变量都会指向到全局变量
http://www.bkjia.com/phpjc/631549.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/631549.htmltecharticle最近在开发一个discuz!插件,今天遇到一个问题,我在后台的一个函数中调用插件的变量数据时返回空值,测试几次无果后突然想起应该是没...
其它类似信息

推荐信息