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

时间:2013-09-25 19:24:31

标签: php

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

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

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


getParam("id");

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

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

3 个答案:

答案 0 :(得分:2)

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

考虑以下情况:

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

See it live!

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

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

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

See it live!


现在,为了解决您的实际问题,您可以将$errorCount作为reference传递:

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

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

另一种解决方案是使用global变量,但在我看来,这不是非常良好做法,如果可能,应该避免使用。您可能需要查看this帖子以了解原因。

有关此问题的详情,请参阅PHP Manual

答案 1 :(得分:0)

这是因为您的变量未在函数范围内定义。你有几个选择。 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);

答案 2 :(得分: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");