В PHP 3 уровень серьёзности ошибки устанавливался как простое цифровое
значение, образуемое суммированием чисел, относящихся к ошибкам разных
уровней. Обычно это были значения 15 для сообщения обо всех ошибках и 7 для простых уведомляющих сообщений.
В PHP 4 имеется большой набор уровней ошибок и предупреждений, а также
разборщик конфигурации, который позволяет теперь использовать символьные константы для установки нужного поведения.
Уровни сообщений теперь должны конфигурироваться явно с отделением уровней
предупреждений, которые не должны генерировать сообщения об ошибках, x-ируя их из символьной константы
E_ALL. Звучит сложно? Хорошо, скажем, вы хотите, чтобы система сообщений об ошибках
выводила всё, кроме предупреждений простого стиля, которые категоризированы символьной константой
E_NOTICE. Затем вы хотите поместить в ваш php.ini следующее: error_reporting = E_ALL & ~ ( E_NOTICE ).
Если вы хотите подавить также и предупреждения, вы добавляете в
соответствующую константу скобки и используете бинарную операцию ’|’: error_reporting= E_ALL & ~ ( E_NOTICE | E_WARNING).
Предупреждение!
Использование старых значений 7 и 15 для установки сообщений об ошибках
это плохая идея, так как при этом подавляются некоторые новые
добавленные классы ошибок, в том числе - ошибки разборщика. Это может
привести к весьма странному поведению, так как скрипты не смогут
больше работать без показа сообщений об ошибках.
В прошлом это приводило также к появлению большого количества
невоспроизводимых сообщений о bug’ах, когда
люди сообщали о проблемах машины скриптов, которые невозможно было
отследить, поскольку TRUE case обычно имел отсутствующий символ ’}’ в нужном файле, о чём разборщик не
мог сообщить по причине неправильно сконфигурированной системы сообщений об ошибках.
Поэтому проверка установок системы сообщений об ошибках это первое, что
нужно сделать, если ваш скрипт тихо умирает/die. Zend-машину можно
считать в данное время в достаточной степени доработанной, чтобы не получать такого странного поведения.
В большом количестве существующего кода PHP 3 используются конструкции
языка, которые должны рассматриваться как очень плохой стиль
программирования, поскольку работа этого кода может быть легко нарушена
изменениями в других местах. PHP 4 ввёл большое количество уведомляющих
сообщений в ситуациях, где PHP 3 этого не делал. Это легко исправить,
отключив сообщения E_NOTICE, но обычно лучше скорректировать код.
Наиболее общий случай вывода уведомлений теперь - это использование
незакавыченных строковых констант в качестве индексов массивов. PHP 3 и 4
не интерпретируют эти строки, если не известно ключевое слово или константа
с этим именем, но если константа с этим именем была определена где-нибудь
ещё в коде, это может нарушить работу вашего скрипта. Это может даже
представлять опасность для защиты, если взломщик переопределяет строковые
константы способом, когда скрипты дают права доступа, которые не
предполагались. Так, PHP 4 будет теперь предупреждать вас об использовании незакавыченной строковой константы, как, например, в $_SERVER[REQUEST_METHOD]. Изменение этого на
$_SERVER[’REQUEST_METHOD’] осчастливит разборщик и значительно улучшит стиль и повысит безопасность
вашего кода.
Другое, о чём сейчас также сообщает PHP 4, это использование
неинициализированных переменных или элементов массива.