以下是我的代码的缩短版本:
<?php
$foo = "Bar";
function test () {
echo $foo; // Undefined variable?
}
test();
?>
我不明白,为什么PHP说,$foo
未定义。我总是找到停用错误报告的解决方案,但我想修复我的代码。我错过了什么?
答案 0 :(得分:2)
在PHP中,除非使用global $foo;
显式导入全局变量,否则无法从函数中访问全局变量。
$foo = "Bar";
function test() {
global $foo;
echo $foo;
}
test();
另一种选择是以$GLOBALS['foo']
的形式访问它 - $GLOBALS
是一个特殊的数组,它“包含”全局范围并且随时可用。
然而,使用全局变量通常是一个坏主意,导致意大利面条代码。尽量避免它们。通常,正确的方法是使变量成为函数参数:
function test($foo) {
echo $foo;
}
test('bar');
答案 1 :(得分:1)
<?php
$foo = "Bar";
function test ($foo) {
echo $foo; // Now it's defined, as it's passed to the function.
}
test($foo);
?>
它超出了函数的范围,因此它不知道它存在。
不要听他们告诉你使用global
- 这不是好习惯,而且会使你的全局阵列混乱(并且可能会导致安全风险,具体取决于你在那里投掷的内容)。 强>
将参数作为参数传递。这是正确的方法。
答案 2 :(得分:1)
在函数test
中,$foo
当前被视为局部变量。但是你没有在这个方法中定义这样的局部变量。
你想要的是使用在这个函数之外定义的变量$foo
。因此,您想要使用全局变量。因此,您应该声明它,即在函数global $foo
中使用test
。
您可能需要阅读http://www.php.net/manual/en/language.variables.scope.php以更好地理解这一概念。
答案 3 :(得分:-1)
在你的函数上添加一个全局$ foo
$foo = "Bar";
function test () {
global $foo;
echo $foo; // Undefined variable?
}
test();
答案 4 :(得分:-1)
您似乎需要更多教程......这是编程语言的基础知识: http://www.php.net/manual/en/language.variables.scope.php
您应该将变量作为参数传递(在某些情况下,可以使用全局变量但很少)。