У меня есть сценарий с 3 (соответствующими) глобальными переменными, используемыми для отслеживания ошибок, которые происходят во время проверки пользовательских данных. Функция, которая обрабатывает их выглядит следующим образом:Глобальные переменные, получающие сброс в PHP
$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
не хранится после того, как функция заканчивается. Если я повторяю значение внутри функции, это будет только что присвоенное ему значение, однако, если я повторю его перед назначением, это будет значение, которое оно имело, когда оно было инициализировано.
Любые идеи, в которых может возникнуть проблема? Благодарю.
EDIT:
errorHandler
класс используется следующим образом:
$errorHandler = new errorHandler; // Earlier in code
function addError($errorMessage) { // Function has name to avoid renaming
global $errorHandler;
$errorHandler->addError($errorMessage);
}
Можете ли вы поделиться примером того, какой класс используется? (с вашей отладкой) –
Если вы имеете в виду внешнюю библиотеку: http: //getid3.sourceforge.net/ –
Я имею в виду использование функции «errorHandler», которую вы написали. –