定义的变量未定义?

时间:2014-02-02 13:28:46

标签: php variables undefined

以下是我的代码的缩短版本:

<?php
    $foo = "Bar";

    function test () {
        echo $foo; // Undefined variable?
    }

    test();
?>

我不明白,为什么PHP说,$foo未定义。我总是找到停用错误报告的解决方案,但我想修复我的代码。我错过了什么?

5 个答案:

答案 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

您应该将变量作为参数传递(在某些情况下,可以使用全局变量但很少)。