Home >Backend Development >PHP Tutorial >php global 全局变量小谈

php global 全局变量小谈

WBOY
WBOYOriginal
2016-06-23 13:36:23746browse

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn