我有一个带有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);
}
答案 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文件中变量的值。这些值不会在每次发出请求时更改。