全局变量在PHP中重置

时间:2017-01-29 09:49:41

标签: php variables reset

我有一个带有3个(相关)全局变量的脚本,用于跟踪我在检查用户数据时发生的错误。处理它们的函数如下所示:

$errors = '';
$errorNo = 0;
$erred = false;

function addError($errorMessage) {
    global $errors, $errorNo, $erred;
    if (!$erred) {
        $erred = true;
    }
    $errorNo++;
    $errors .= $errorNo . ". " . $errorMessage;
}

假设我多次致电addError()$errors的值为'',即使它刚被addError()功能修改过。不仅如此,变量$errorNo$erred也被重置为我首次初始化它们的值。

我彻底检查了我的代码,看看$error或其他变量是否在其他地方被修改,但无济于事。

现在,这里变得更加怪异了。为了确保它们没有被其他任何东西修改(我有一个使用require()导入的外部库),我创建了一个名为errorHandler的类。

class errorHandler {
    private $errorCount = 0;
    private $erred = false;
    private $errors = '';

    public function addError($errorMessage) {
        $this->erred = true;
        $this->errorCount++;
        $this->errors .= $this->errorCount . ". " . $errorMessage;
    }

    public function getErrors() {
        return $this->errors;
    }
}

函数完成后,$errors$errorCount$erred的值不会被存储。如果我回显函数内部的值,它将是我刚分配给它的值,但是如果我在赋值之前回显它,它将是它初始化时的值。

问题可能存在的任何想法?感谢。

编辑:

errorHandler类使用如下:

$errorHandler = new errorHandler; // Earlier in code

function addError($errorMessage) { // Function has name to avoid renaming
    global $errorHandler;
    $errorHandler->addError($errorMessage);
}

2 个答案:

答案 0 :(得分:0)

问题结果是变量被重置(正如您可能预期的那样),但是,这是一个可以从其他人那里学到的错误我希望

基本上我在if语句中有一个函数checkLength(),如下所示:

if (checkLength($stringOne) && checkLength($stringTwo) && checkLength($stringThree)) {

checkLength语句将检查字符串的长度,如果它太短或太长则返回false,但在此之前会使用addError()函数添加错误:

function checkLength($string) {
    if (..
    ..
    else {
        addError("Too short/long");
        return false;
    }
}

我没有意识到,if语句只有一个错误值(因为我有&&运算符)它会在第二个或第三个字符串上运行checkLength,因此不会添加错误,导致我相信只记录了其中一个错误。

这里的课程:尽可能存储变量中函数的返回值,然后检查变量的值而不是函数的返回值。不管怎样,谢谢。

答案 1 :(得分:0)

每次发出POST请求时,都会再次处理PHP文件,这意味着代码从头开始运行。因此,变量的值每次都会重置。

要解决此问题,您可以在javascript文件中维护全局变量,并且每次从javascript文件调用此函数时,请更改js文件中变量的值。这些值不会在每次发出请求时更改。