快速简单的PHP问题 - 访问函数中的变量


Quick simple PHP issue - accessing variable in function

很长一段时间

没有使用PHP,跳回去并被一个对我来说没有意义的错误击中,这段代码:

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

getParam("id");

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

我不明白为什么这会失败,但$errorList没有 - 我确信这是愚蠢的事情。

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

请考虑以下情况:

$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 手册。

这是因为您的变量未在函数范围内定义。您有几个选择。1 个选项是将这些变量声明为全局变量。或者,您可以创建一个类。

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);

默认情况下,在函数外部定义的普通变量不可访问。为了接触它们,我们应该简单地使用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");