php global global,PHP中global全局变量的作用范围

最近在开发一个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”关键字的演示例子:

$my_var='Hello World';

test_global();

functiontest_global() {

// Now in local scope

// the $my_var variable doesn't exist

// Produces error: "Undefined variable: my_var"

echo$my_var;

// Now let's important the variable

global$my_var;

// Works:

echo$my_var;

}

?>

正如你在上面的例子中看到的一样,“global”关键字是用来导入全局变量的,看起来它工作的很好,而且很简单,那么为什么我们还要担心使用“global”关键字来定义全局数据呢?

我来给处入行的人讲解一下全局变量global的使用,”全局变量“,这个名词中的全局两个字已经告诉我们这个变量在各个地方都能用,先看一个实例:

$a= 1;

$b= 2;

functionSum()

{

global$a,$b;//在里面声明为全局变量

$b=$a+$b;

}

Sum();

echo$b;

?>

结果: 3

如果没有全局变量global在方法内是不能获得$a,$b值的,所以在方法里面想用外面的变量就需要先声明这个变量为全局变量,这样就可以使用了,很方便吧,代码如下:

$w3sky= 1;

$w3sky2= 2;

unction Sum()

{

global$w3sky,$w3sky2;$w3sky2=$w3sky+$w3sky2;

}Sum();

echo$w3sky2;

?>

以上脚本的输出将是“3”,在函数中申明了全局变量 $w3sky 和 $w3sky2,任何变量的所有引用变量都会指向到全局变量.

(责任编辑:admin)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值