<?php
$foo = 1;
function meh(){
// <-- $foo can't be accessed
}
它看起来不像是全局的,但变量在外面的事实是否有像全局那样的缺点?
答案 0 :(得分:7)
是。可以从任何位置访问它们,包括其他脚本。它们略微更好,因为您必须使用global
关键字从函数中访问它们,这样可以更清楚地了解它们来自何处以及它们的作用。
The disadvantages of global variables apply, 但这并不会立即使它们像某些OO语言中常见的那样邪恶。如果他们能够提供一个有效且易于理解的好解决方案,那么你就没事了。实际上有数百万个成功的PHP项目使用这样声明的全局变量。你可以做的最大的错误就是不使用它们,并且当你的代码首先使用它们时,它们会变得更加复杂。 :d
答案 1 :(得分:7)
在任何函数之外定义的所有变量都在全局范围内声明。如果要访问全局变量,您有两种选择:
使用全球关键字
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
?>
或使用 $ GLOBALS
<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
?>
答案 2 :(得分:5)
<?php
$foo = 1;
function meh(){
global $foo;
// <-- $foo now can be accessed
}
?>
答案 3 :(得分:2)
函数外部类似于全局范围(与类C语言相比),但是您必须做一件事来允许访问函数中的var:
function meh(){
global $foo;
// $foo now exists in this scope
}
答案 4 :(得分:2)
在您的示例中,$foo
在全局范围内创建为变量。 (除非您在其他函数/方法范围内显示的脚本为included()
。)
PHP没有真正的全局变量。您必须使用global $foo;
语句手动对其进行别名来访问它们。 (此外,“任何全球性不好”的建议就是这样,不好的建议。)
答案 5 :(得分:2)
如果我理解你的问题,那真的不应该有问题。除非你将一个变量声明为全局变量,否则它将被限制在声明它的范围内,在这种情况下,定义上面代码的任何php文件。你可以在meh()中声明另一个变量$ foo,它将是独立于外部定义的$ foo。