|
2009-01-21
Обсудить на форуме
Принять участие в разработке библиотеки/утилиты можно на GitHub.
Простая, но весьма полезная библиотека PHP_Exceptionizer позволяет
преобразовывать нотисы (E_NOTICE), предупреждения (E_WARNING) и т. д.
в исключения PHP.
Пример использования
|
Листинг 1
|
// Где-то в начальном коде инициализации скрипта.
error_reporting(E_ALL);
if (<is debug mode active>) {
$exceptionizer = new PHP_Exceptionizer(E_ALL);
// И оставьте эту переменную, чтобы она не удалялась до окончания
// скрипта. Удаление переменной вызовет отключение PHP_Exceptionizer.
}
...
// Далее можно ловить нотисы как исключения:
try {
echo $undefinedVariable;
} catch (E_NOTICE $e) {
echo "Notice raised: " . $e->getMessage();
}
...
// Если вы ловите E_NOTICE, то поймаете и E_WARNING тоже:
try {
fopen("non-existed", "r");
} catch (E_NOTICE $e) {
echo "Warning or worse raised: " . $e->getMessage();
}
...
// А можно и не ловить, тогда нотис вызовет завершение программы.
echo $undefinedVariable; |
Польза при отладке скриптов
Библиотеку очень удобно использовать при разработке веб-скриптов.
Как известно, ее лучше проводить в режиме error_reporting = E_ALL и держа в
уме, что даже малейший нотис при разработке намек на фатальную ошибку.
|
Типичный пример, когда нотисы могут потеряться, скрипты, генерирующие
редирект на другую страницу. Это проявляется при включенной буферизации
выходного потока (ob_start()).
|
Конечно же, на "боевом" сервере лучше нотисы в исключения не преобразовывать
(дабы не делать из мухи слона), а просто читать их в лог-файлах.
Польза при генерации массовых рассылок
Представьте, что вы написали скрипт, который рассылает письма нескольким
миллионам подписчиков сайта, и текст письма генерируется динамически, в зависимости
от профиля пользователя или его друзей. Вы можете поймать себя на мысли, что
запускать этот скрипт очень страшно... Вдруг там произойдет какая-то ошибка, и
миллион человек увидят пустые поля или "скомканное" письмо?
PHP_Exceptionizer позволяет заметно снизить этот риск, если вы включите ее
в момент генерации письма.
|
|
|