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
),还是在外面被修改了的值(2
7)呢。
function test()
{
global $age;
$age=25;
}
function test2()
{
global $age;
var_dump($age); //这个值应该是什么?
}
test();
var_dump($age);
$age=27;
test2();
没错,这个值应该是27
, 这就是全局变量,只不过这种定义和初始化都是在一个函数体内完成的(不过这种方式不推荐,一般都是在最上面我说的配置文件中初始化的,只在使用的时候定义其全局属性,但不会在代码中修改其值,仅仅作为配置项获取)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。