PHP E_STRICT и __autoload () - PullRequest
       9

PHP E_STRICT и __autoload ()

0 голосов
/ 11 ноября 2009

Я использую __autoload (), который выглядит просто так:

function __autoload($class_name) {
  require_once($class_name . '.class.php');
}

Когда сообщение об ошибке равно E_ALL, оно работает нормально. Класс загружен, и скрипт запускается без ошибок.

Когда сообщение об ошибке E_ALL | E_STRICT, страницы не работают, я просто получаю:

"Fatal error: Class 'NameOfClass' not found in \path\to\current\script on line 0"

Почему? Это ожидаемое поведение при использовании __autoload () или это проблема с моим скриптом?

Ответы [ 3 ]

2 голосов
/ 13 ноября 2009

Проблема заключалась в том, что я превращал все свои ошибки в исключения с помощью пользовательских обработчиков ошибок.

В режиме STRICT класс, включаемый автозагрузкой, выдавал небольшую ошибку об использовании кода. Но это превращалось в исключение.

автозагрузка игнорирует исключения, поэтому следующая автозагрузка (если зарегистрировано несколько) может попытаться загрузить класс.

Поэтому ошибка в моем файле класса никогда не отображалась, но препятствовала существованию класса, вызывая загадочную ошибку в строке 0.

Отключение моего пользовательского обработчика ошибок означало, что PHP печатал ошибку (которую я вижу) вместо того, чтобы выдавать исключение (которое подавляется автозагрузкой), и тогда я мог видеть реальную причину проблемы и исправить ее.

1 голос
/ 11 ноября 2009

Хорошо, если вы включите файл, а класс все еще не загружен после вас - очевидно, он выдаст ошибку.

0 голосов
/ 11 ноября 2009

Возможно, вы можете попробовать вместо этого использовать spl_autoload_register. Я использовал это в среде E_STRICT без ошибок ... хотя технически то, что вы пишете, должно работать также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...