PHP学习之global变量

php的变量分为三类:局部变量,全局变量,静态变量
在一段php脚本中,变量可以在任意位置声明,作用域的意思是指变量在脚本中的使用范围。
同样php的作用域分为三类:1、local(局部作用域) 2、global(全局作用域) 3、static(静态作用域)

local和global作用域

通常情况local和global作用域是容易混淆的,如何区分这两种作用域呢?规则如下:

1、函数外部声明的变量拥有全局作用域,只能在函数外部访问。
2、函数内部声明的变量拥有局部作用域,只能在函数内部访问。

请看下面一段


很明显打印的结果是:1

虽然两个变量名都叫var,但是确实完全不同的两个变量,也是两种不同的作用域,打印出的很明显是全局的变量。

global关键字

我们经常会遇到一种情况,在函数外部声明了一个全局变量后,我们想在函数内部访问或者修改这一全局变量,这里我们就需要使用一个叫global的关键字来实现。

还用刚刚那段代码,我们想在foo()函数内部修改$var的值,像上面那样写法肯定是不行,

function foo(){ 
    $var = '2';//这里只是相当于重新定义一个局部变量,只不过名字恰好跟var是相同的
}

我们需要借助global关键字来实现,


打印的结果是:2

$GLOBALS

说到global关键字,就不得不提$GLOBALS,$GLOBALS是超全局变量,在生成全局变量的时候,PHP 同时在名为 $GLOBALS的数组中存储了所有的全局变量。


有兴趣的童鞋可以打印下var_dump($GLOBALS);看看结果。
结合unset()方法会更容易理解,看如下两段代码

第一段

打印结果是:2
第而段

打印结果是:1

因为我们知道global是生成一个全局变量的别名引用(类似于桌面上一个文件跟它的快捷方式)。引用的值修改后,全局变量的值也就修改了,在第一段代码中,修改了快捷方式的内容,原文件的内容也得到了修改,然后又删除了快捷方式(unset($var);),所以结果是修改后的值。
但是在第二段代码中,在$var = '2';之前使用了unset($var);方法销毁了引用变量,所以导致全局的变量值并未修改。

再看一段代码


打印结果都是空

因为全局变量销毁了,引用也销毁了(原文件没了,快捷方式也没了)

你可能感兴趣的:(PHP学习之global变量)