全局变量
有的人很不习惯PHP中的变量作用域,PHP中函数变量和全局是完全隔绝的,也就是无法相互访问。
1 2 3 4 5 |
|
global和$GLOBALS[]
我们可以使用global关键字来声明变量,上面的例子就变成了这样
1 2 3 4 |
|
这就可以了,在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组。前面的例子可以写成:
1 2 3 |
|
原来以为global和$GLOBALS除了写法不一样以为,其他都一样,可是在实际应用中发现,2者的区别还是很大的! 看这个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
为什么是这样:
结果
0
1
不应该是两个1吗?我们在看一个例子
1 2 3 4 5 6 7 |
|
结果
1
明明是unset了呀,为什么还会打印出来呢?
众所周知,我们的function里面的永远是个私有变量,global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量,unset的确是起作用了,它unset了一个global 的值的引用,而$GLOBALS[]确确实实调用是外部的变量,函数内外会始终保持一致!