1

很长一段时间没有使用 PHP,跳回来并遇到一个对我来说没有意义的错误,这段代码:

$errorCount = 0;
$errorList = array();

function getParam($paramId){
    if (isset($_GET[$paramId])){
        $id = $_GET[$paramId];
    } else {
         $errorList[] = (string)$paramId;
         $errorCount++;
    };
};


getParam("id");

弹出的错误是:未定义变量:errorCount

我不明白为什么会失败,但 $errorList 不会——我敢肯定这很愚蠢。

4

3 回答 3

2

这是一个可变范围问题。该变量在函数范围内不可用,因此它只会显示错误消息。

考虑以下情况:

$hello = 'hello';
function test() {
    echo $hello;
}
test();

现场观看!

该变量$hello是在代码中定义的,但是当您尝试执行上述代码时,您会收到一条错误消息Undefined variable: hello

如果您希望您的变量可以在函数内部访问,请将它们作为参数传递,如下所示:

$hello = 'hello';
function test($hello) {
    echo $hello;
}
test($hello);

现场观看!


现在,要解决您的实际问题,您可以$errorCount作为参考传递:

$errorCount = 0;
$errorList = array();

function getParam($paramId, & $errorCount){
    if (isset($_GET[$paramId])){
        $id = $_GET[$paramId];
    } else {
         $errorList[] = (string)$paramId;
         $errorCount++;
    };
};

另一种解决方案是使用global变量,但在我看来,这不是一个很好的做法,应该尽可能避免。您可能想查看这篇文章以了解原因。

有关这方面的更多信息,请参阅PHP 手册

于 2013-09-25T19:26:06.240 回答
0

那是因为你的变量没有在你的函数范围内定义。你有几个选择。一种选择是将这些变量声明为全局变量。或者你可以创建一个类。

function getParam($paramId){
  global $errorList;
  global $errorCount;
    if (isset($_GET[$paramId])){
        $id = $_GET[$paramId];
    } else {
         $errorList[] = (string)$paramId;
         $errorCount++;
    };
};

您还可以通过引用传递变量:

例如:

$my_variable = array();
$my_variable_ct = 0;


function fn($arg1, $my_var, $my_var_count) {
   // do everything here
}

fn("Hello", &$my_variable, &$my_variable_ct);
于 2013-09-25T19:25:30.483 回答
0

默认情况下,在函数之外定义的普通变量是不可访问的。要访问它们,我们应该简单地使用global $var1, $var2;来访问它们的值,如下所示:

$errorCount = 0;
$errorList = array();

function getParam($paramId){

    global $errorList, $errorCount;

    if (isset($_GET[$paramId])){
        $id = $_GET[$paramId];
    } else {
         $errorList[] = (string)$paramId;
         $errorCount++;
    };
};


getParam("id");
于 2013-09-25T19:26:23.140 回答