$GLOBALS 是一个关联数组,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。
php语法中,很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然
根据官方的解释是
1. $GLOBALS[‘var’]是外部的全局变量本身
2. global $var是外部$var的同名引用或者指针。
举例说明一下:
<?php
$var1 = 1;
$var2 = 2;
function test(){
$GLOBALS['var2′] = &$GLOBALS['var1′];
}
test();
echo $var2;
?>
正常打印结果为1
<?php
$var1 = 1;
$var2 = 2;
function test(){
global $var1,$var2;
$var2 = &$var1;
}
test();
echo $var2;
?>
意外打印结果为2
为什么会打印结果为2呢?其实就是因为$var1的引用指向了$var2的引用地址。导致实质的值没有改变。
我们再来看一个例子吧。
<?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其实就是$var = &$GLOBALS[‘var’]。调用外部变量的一个别名而已
$GLOBALS — 引用全局作用域中可用的全部变量
一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
<?php
function test() {
$foo = "local variable";
echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
echo '$foo in current scope: ' . $foo . "\n";
}
$foo = "Example content";
test();
?>
以上例程的输出类似于:
$foo in global scope: Example content
$foo in current scope: local variable
注释
Note:
“Superglobal”也称为自动化的全局变量。这就表示其在脚本的所有作用域中都是可用的。不需要在函数或方法中用 global $variable; 来访问它。
Note: 变量可用性
与所有其他超全局变量不同,$GLOBALS在PHP中总是可用的。
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
这些超全局变量是:
很实用的一个例子: extract array into global variables
function foo() {
$vars = array('aa' => 11, 'bb' => 22);
$GLOBALS += $vars;
}
foo();
echo $aa;
function extract_array($array=false)
{
//if($array AND is_array($array)) extract($array);
//else { extract($_POST); extract($_GET); }
if($array AND is_array($array)) $GLOBALS += $array;
else{ $GLOBALS += $_POST; $GLOBALS += $_GET; }
}
更多参考:
变量范围
PHP: extract 将数组array的key变为变量 ( extract函数的定义和用法 )
HP7革新与性能优化
JQuery: 使用Ajax赋值给全局变量失败异常的解决方法,ajaxSetup, jquery ajax global
本文: PHP: 关键字global 和 超全局变量$GLOBALS的用法、解释、区别
Related Posts
Node.js 工具模块在 Node.js 模块库中有很多好用的模块。接下来我们为大家介绍几种常用模块的使用: 序号 模块名 & 描述 1 OS…
MySQL 查询时强制区分大小写让MySQL搜索区分大小写或排序时分大小写方法如下: 1.在SQL中强制 SELECT `field` FROM `table` WHERE BINARY…
-