php中的变量范围

时间:2013-07-20 15:51:44

标签: php

我遇到了一个问题,在运行alertError()时,它看起来很好并且存在$ errors的访问权限,但是在运行showErrors()时,它告诉我变量是未定义的。 “未定义的变量:”

中的错误
$errors = array();

function alertError($error){
    $errors[] = $error;
    echo $errors[count($errors)-1];
}

function showErrors(){
        echo "<html>
                <head>
                    <title>Error occurred!</title>
                </head>
                <body>";
                foreach($errors as $error){
                    echo $error."<br>";
                }
        echo "
                </body>
             </html>";
    die();
}

为什么alertError()似乎知道定义了$ errors,并且showErrors()无法访问他?

3 个答案:

答案 0 :(得分:4)

将错误传递给showErrors()

function showErrors($errors){
   ...
}

您可能需要这样的代码

$errors = alertError($error);
showErrors($errors);

function alertError($error){
    $errors[] = $error;
    echo $errors[count($errors)-1];
    return $errors;
}

function showErrors($errors){
        echo "<html>
                <head>
                    <title>Error occurred!</title>
                </head>
                <body>";
                foreach($errors as $error){
                    echo $error."<br>";
                }
        echo "
                </body>
             </html>";
    die();
}

答案 1 :(得分:2)

当函数'alertError()'运行时,它对全局变量$ errors一无所知。它每次都会创建新的变量$ errors。 所以它可以正常工作但不是你想要的。在showErrors中,此变量未声明,因此您会收到通知。 您可以在每个函数中使用语句全局$ errors ,但这是一种不好的做法。

答案 2 :(得分:1)

在showErrors()

的第一行添加此行
global $errors;

这将使您可以访问在函数

上面声明的全局$错误

<强>更新

正如提到的那样,在评论中买了Alien先生和Neil Neyman先生 - 这是一个床上练习...... 如果您要为更复杂的系统编写一些php,您应该了解其链接和注释中显示的OOP概念。

祝你好运!