PHP中全局变量global和$GLOBALS[]的区别分析

yipeiwu_com6年前PHP代码库
一、举例比较
例一:
复制代码 代码如下:

<?php
$var1 = 1;
function test(){
unset($GLOBALS['var1']);
}
test();
echo $var1;
?>

因为$var1被删除了,所以什么东西都没有打印。
例二:
复制代码 代码如下:

<?php
$var1 = 1;
function test(){
global $var1;
unset($var1);
}
test();
echo $var1;
?>

意外的打印了1。证明删除的只是别名引用,其本身的值没有受到任何的改变。

二、解释
global $var其实就是&$GLOBALS['var'],调用外部变量的一个别名而已。
上面代码中的$var1和$GLOBALS['var1']是指的同一变量,而不是两个不同的变量。
PHP的全局变量和C语言有一点点不同。在C语言中,全局变量在函数中主动生效,除非被局部变量笼罩。这可能引起一些问题,有些人可能漫不经心的转变一个全局变量。PHP中全局变量在函数中应用时必须用global申明为全局。
PHP的Global变量的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。

三、结论
1.$GLOBALS['var']是外部的全局变量本身
2.global $var是外部$var的同名引用或者指针。

相关文章

如何使用PHP批量去除文件UTF8 BOM信息

原理:UTF8文件,微软为了增加一个识别信息,有了BOM这个东西:BOM —— Byte Order Mark,缺省在Windows等平台上编辑的UTF8文件会在头部增加3个字节的标记信...

并发下常见的加锁及锁的PHP具体实现代码

在最近的项目中有这样的场景 1.生成文件的时候,由于多用户都有权限进行生成,防止并发下,导致生成的结果出现错误,需要对生成的过程进行加锁,只容许一个用户在一个时间内进行操作,这个时候就需...

深入分析PHP优化及注意事项

1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍。 当然了,这个测试方法需要在十万级以上次执行,效果才明显。 其实静态...

使用Curl进行抓取远程内容时url中文编码问题示例探讨

PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,...

php中静态类与静态变量用法的区别分析

本文实例分析了php中静态类与静态变量用法的区别。分享给大家供大家参考。具体分析如下: static是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本...