global php 是否缓存,php global 全局变量小谈

php 的全局变量看起来很好用,但稍有不慎,很容易被套住。

比如: 如果一个简单的php配置文件如下:

$name="Yi_Zhi_Yu";

当我们想要使用这个$name的时候,都知道使用include就行了。没错,这样可以。但假如我想把这个$name作为一个全局变量使用,以方便统一修改呢

也容易:

include("./config.inc");

global $name;

echo $name; //Yi_Zhi_Yu

那么问题来了,假如某个函数里我要用这个全局变量呢,或许你会这么写

function test()

{

include("./config.inc"); //这里加载是错误的

global $name;

var_dump($name);

}

test();

Sorry, 你这样是得不到这个变量值得,得到的仅仅是个null

这就是我在实际中遇到的一个坑,即文件加载的全局变量的初始化只能在整个脚本的最外层,我说的最外层是指不能被包含在任何的函数体或者类里面

include("./config.inc"); //最外层初始化全局变量

function test()

{

global $name; //使用的时候定义其全局属性

echo $name; //Yi_Zhi_Yu

}

test();

那再来一个问题,一个在test里面被定义了全局属性的变量(假设$age=25),假如在外面被修改了值($age=27),然后这个变量($age)再在另一个函数中调用,这个时候的这个$age应该是哪个值呢,代码如下,是被初始化的时候值(25),还是在外面被修改了的值(27)呢。

function test()

{

global $age;

$age=25;

}

function test2()

{

global $age;

var_dump($age); //这个值应该是什么?

}

test();

var_dump($age);

$age=27;

test2();

没错,这个值应该是27, 这就是全局变量,只不过这种定义和初始化都是在一个函数体内完成的(不过这种方式不推荐,一般都是在最上面我说的配置文件中初始化的,只在使用的时候定义其全局属性,但不会在代码中修改其值,仅仅作为配置项获取)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值