У меня есть универсальный класс Logger, который выглядит следующим образом:Что вызывает эту странную PHP фатальную ошибку?
class Logger {
...
public function add($userId, $siteId, $logTypeId, $message) {
$Log = LogMapper::create();
$Log->setUserId($userId);
$Log->setSiteId($siteId);
$Log->setLogTypeId($logTypeId);
$Log->setMessage($message);
$Log->save();
...
}
...
}
А класса Log:
class Log {
public function setUserId($userId) {
if ($this->userId !== $userId) {
$this->userId = $userId;
}
return $this;
}
public function getUserId() {
return $this->userId;
}
public function setSiteId($siteId) {
if ($this->siteId !== $siteId) {
$this->siteId = $siteId;
}
return $this;
}
public function getSiteId() {
return $this->siteId;
}
...
}
Так же как класс LogMapper:
class LogMapper extends DataMapper {
...
public static function create($row = false) {
return new Log($row);
}
public static function getById($id) {
...
}
}
Как вы можете видеть , У меня есть еще два класса LogMapper и Log, которые Logger использует для записи записей в базу данных.
У меня также есть механизм, который отправляет мне электронное сообщение, когда возникает фатальная ошибка. Я получил следующее около десятка писем:
Call to undefined method Log::setUserId()
Моего приложения использует автозагрузку, и я сначала подумал, что может быть проблемой, но очевидно, что класс Logger загружается, и так самозарядный не нарушен. Путь к классу Log корректен в автозагрузчике ... и, очевидно, класс журнала был загружен - в противном случае была бы выбрана ошибка «Class» Log «not found».
Любые идеи, которые могут вызывать эту ошибку? Я использую eAccelerator в выпуске.
Были ли все дюжины писем? проблема остается, если вы не используете autoload, но проверяете классы каким-то другим способом? И, что наиболее очевидно, существует ли метод setUserId() в классе Log? –
Возможно, картограф неправильно отображает методы, поэтому класс Log не может распознать какой-либо метод setUserId(). –
Я не могу воспроизвести проблему локально, поэтому не могу сказать, помогает ли использование автозагрузчика. –