【发布时间】:2017-01-29 09:49:40
【问题描述】:
我有一个包含 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);
}
【问题讨论】:
-
你能分享一个正在使用的类的例子吗? (与您的调试)
-
如果你指的是外部库:getid3.sourceforge.net
-
我的意思是你写的“errorHandler”函数的用法。
-
您不尝试在单独的(http/page)请求中访问这些值吗?
-
Global 表示它们存在于当前运行脚本的全局范围内。它们在再次运行脚本时重新初始化(通过新页面请求)。如果您想保留重新执行的值,请将值存储在会话中或传递它们。