<?php
$foo = 1;
function meh(){
// <-- $foo can't be accessed
}
它看起来不像是全球性的,但事实上这个变量在外面是否有像全球性的东西一样的缺点?函数外面的变量是一种全局变量吗?
<?php
$foo = 1;
function meh(){
// <-- $foo can't be accessed
}
它看起来不像是全球性的,但事实上这个变量在外面是否有像全球性的东西一样的缺点?函数外面的变量是一种全局变量吗?
是的。可以从任何位置访问它们,包括其他脚本。他们是略微更好,因为你必须使用global
关键字从一个函数内访问它们,这使得它们更加清晰地表明它们来自哪里以及它们的作用。
The disadvantages of global variables apply,但这并不能立即使它们成为邪恶的,正如在某些面向对象语言中经常被察觉的那样。如果他们提供了一个高效且易于理解的好解决方案,那么你很好。实际上有数百万成功的PHP项目使用这样的全局变量声明。你可以做的最大的错误就是没有使用它们,并且如果首先使用它们的话可能会让你的代码变得更加复杂。 :D
<?php
$foo = 1;
function meh(){
global $foo;
// <-- $foo now can be accessed
}
?>
功能的外面是八九不离十像全球范围内(相比于C的语言),但你必须做的一件事,让一个函数内访问VAR:
function meh(){
global $foo;
// $foo now exists in this scope
}
在您的示例中$foo
在全局范围内被创建为变量。 (除非在另一个函数/方法范围内显示的脚本是included()
)。
PHP没有真正的全局变量。您必须使用global $foo;
语句手动将其别名,才能访问它们。 (也是“什么东西全球都不好”建议就是这样,坏建议。)
如果我正确理解你的问题,真的不应该有问题。除非将变量声明为全局变量,否则它将被限制在声明的范围内,在这种情况下,无论上面的代码是在哪个php文件中定义的。您都可以在meh()中声明另一个变量$ foo,它会是独立于外部定义的$ foo。
在全局范围内声明在任何函数外部定义的所有变量。如果你想访问一个全局变量,你有两个选择:
使用全球关键字
<?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'];
}
?>
阅读更多at http://php.net/manual/en/language.variables.scope.php