请看以下两个例子:
示例1:
$variable = 'some value';
class Foo {
public function bar() {
global $variable;
print $variable;
}
}
示例2:
$variable = 'some value';
class Foo {
public function bar() {
print $GLOBALS['variable'];
}
}
示例可以这样使用:
$foo = new Foo();
$foo->bar();
两者似乎都做同样的事情?有什么不同?有一种方式比另一种更好吗?为什么有两种不同的方法呢?
第一个例子对我来说很奇怪,因为它看起来像一个声明,然后使用变量而不指定它。看起来很奇怪。
谢谢。
答案 0 :(得分:6)
global
关键字将变量“导入”到本地范围,而通过$GLOBALS
访问全局则不会。
答案 1 :(得分:2)
$GLOBALS
只是访问全局变量的另一种方式。 global
关键字将全局变量导入本地范围。 $GLOBALS
可用于访问全局变量,而不会污染本地范围。
例如,它可用于迭代全局变量。
请参阅$GLOBALS
:
$ GLOBALS - 引用全局范围内可用的所有变量
通过在函数中声明$ a和$ b global,对任一变量的所有引用都将引用全局版本。
从全局范围访问变量的第二种方法是使用特殊的PHP定义的$ GLOBALS数组。
答案 2 :(得分:1)
正在使用一个区别。来自manual page
<?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();
?>
您可以看到您可以访问此全局变量和本地变量。使用global $foo
时,您无法执行此操作。还有其他的微妙差异,但我认为没什么关系。
你可能想问问自己是否应该使用全局变量,就我所使用的方式而言,它几乎总是一种反模式,尽管这可能是一种品味的东西。
答案 3 :(得分:1)
$GLOBALS
以Array
的形式表示整个全局变量表。
global
关键字允许您指定一个或多个变量标签,它们是局部变量表中全局变量表的一部分。在其他答案中通常称为 import 。
曾经有一段时间,函数范围内的$GLOBALS
没有立即更新全局表。但我认为现在已经解决了。至少我不能再复制它了。
所以区别只是语义如何写东西。
然而,两者之间存在差异。当您通过global
关键字在本地范围内访问全局变量时,无法取消设置全局变量。
$var = 1;
foo();
function foo()
{
global $var;
unset($var); # won't unset the global variable
}
但您可以通过$GLOBALS
访问它们。
$var = 1;
foo();
function foo()
{
unset($GLOBALS['var']); # unsets the global variable
}
这是非常具体的,如果有兴趣请参阅Demo。
答案 4 :(得分:0)
来自php手册http://php.net/manual/en/language.references.whatdo.php
考虑全球$ var;作为$ var =&amp;的快捷方式$ GLOBALS [&#39;无功&#39;];