Pull to refresh

PHP_Exceptionizer: преобразование E_NOTICE в исключения (Exception)

Reading time 2 min
Views 2.6K
Очень простая, но полезная библиотека PHP_Exceptionizer позволяет преобразовывать нотисы (E_NOTICE), предупреждения (E_WARNING) и т. д. в исключения PHP.

// Где-то в начальном коде инициализации скрипта.
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_WARNING, то поймаете и E_NOTICE тоже:
try {
    echo $undefinedVariable;
} catch (E_WARNING $e) {
    echo "Warning or better raised: " . $e->getMessage();
}
...
// А можно и не ловить, тогда нотис вызовет завершение программы.
echo $undefinedVariable;


Библиотеку удобно использовать при разработке и отладке. Как известно, ее лучше проводить в режиме error_reporting = E_ALL и держа в уме, что даже малейший нотис при разработке — намек на фатальную ошибку.

Типичный пример, когда нотисы могут потеряться, — скрипты, генерирующие редирект на другую страницу. Это проявляется при включенной буферизации выходного потока (ob_start()).

Конечно же, на «боевом» сервере лучше нотисы в исключения не преобразовывать (дабы не делать из мухи слона), а просто читать их в лог-файлах.

Однако существует случай, когда библиотеку имеет смысл включать и в продакшен-режиме. Это — система генерации рассылок. Представьте, что вы написали скрипт, который рассылает письма нескольким миллионам подписчиков сайта, и текст письма генерируется динамически, в зависимости от профиля пользователя или его друзей. Вы можете поймать себя на мысли, что запускать этот скрипт очень страшно… Вдруг там произойдет какая-то ошибка, и миллион человек увидят пустые поля или «скомканное» письмо? PHP_Exceptionizer позволяет заметно снизить этот риск, если вы включите ее в момент генерации письма.

Скачать библиотеку можно тут: dklab.ru/lib/PHP_Exceptionizer
Tags:
Hubs:
+30
Comments 97
Comments Comments 97

Articles