PHP中global全局变量的作用范围
发布:smiling 来源: PHP粉丝网 添加日期:2014-01-06 22:42:03 浏览: 评论:0
最近在开发一个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”关键字的演示例子:
- <?php
- $my_var = 'Hello World';
- test_global();
- function test_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的使用,”全局变量“,这个名词中的全局两个字已经告诉我们这个变量在各个地方都能用,先看一个实例:
- <?php
- $a = 1;
- $b = 2;
- function Sum()
- {
- global $a, $b; //在里面声明为全局变量
- $b = $a + $b;
- }
- Sum();
- echo $b;
- ?>
结果: 3
如果没有全局变量global在方法内是不能获得$a,$b值的,所以在方法里面想用外面的变量就需要先声明这个变量为全局变量,这样就可以使用了,很方便吧,代码如下:
- <?PHP
- $w3sky = 1;
- $w3sky2 = 2;
- unction Sum()
- {
- global $w3sky, $w3sky2;$w3sky2 = $w3sky + $w3sky2;
- }Sum();
- echo $w3sky2;
- ?>
以上脚本的输出将是“3”,在函数中申明了全局变量 $w3sky 和 $w3sky2,任何变量的所有引用变量都会指向到全局变量.
Tags: global 全局变量 作用
相关文章
- ·PHP中全局变量global和$GLOBALS[]的区别(2013-12-02)
- ·php 全局变量global的使用方法(2013-12-23)
- ·PHP Global变量定义一些用法详解(2014-01-17)
- ·PHP基础笔记函数global变量(2014-02-10)
- ·PHP Global与$GLOBALS变量作用域与区别(2014-02-26)
- ·PHP 全局变量之Global关键字引用解读(2014-03-06)
- ·php中global static和$GLOBALS使用与区别(2014-03-13)
- ·PHP中全局变量global详解(2014-03-13)
- ·php中global和$GLOBALS[]用法区别(2014-03-21)
- ·PHP Global定义全局变量使用说明(2014-07-17)
- ·php中global和static两个关键字详解(2014-07-30)
- ·PHP register_globals自定义全局变量开启(2015-04-08)
- ·php多次include后导致全局变量global失效的解决方法(2021-05-14)
- ·PHP 闭包获取外部变量和global关键字声明变量的区别讲解(2021-08-22)
- ·PHP中$GLOBALS与global的区别详解(2021-11-13)
- ·PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】(2021-12-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)