В РНРЗ эти константы не определялись; вместо них непосредственно задавались соответствующие числа, например 2 указывало уровень ERROR_WARNING. Использование констант вместо чисел - правильное решение, поскольку это оберегает от необходимости корректировать код при изменениях в схеме нумерации.
Обработка ошибок
Мы как среда выполнения РНР генерирует ошибки в потенциально
опасных или плохо запрограммированнных ситуациях. Однако среда выполнения не имеет понятия о логике программы и потому мало что может сделать - разве что вывести сообщение об ошибке. Правильно спроектированная программа должна уметь сама выявлять сбойные ситуации и обрабатывать их, а также регистрировать такие случаи в журнале. Большинство функций РНР возвращает в случае ошибки false или 0. Исследовав возвращенное значение, можно определить, что следует делать - продолжить выполнение или установить направление дальнейших действий.
Подавление вывода сообщений об ошибках
Сообщения об ошибках, генерируемые средой выполнения, за исключением тех, которые вызваны проверкой входных данных, в идеале не следует показывать конечному пользователю. В предыдущем разделе мы видели, как это можно сделать, вызвав функцию error_reporting() с аргументом 0. Другой способ добиться того же - использовать оператор @. Когда этот оператор предшествует вызову функции, сообщения об ошибках, которые она может сгенерировать, не выводятся.
Оператор @ может предшествовать любому выражению, но его нельзя использовать перед управляющими конструкциями, например fo reach. Доступ к сообщению об ошибке можно, тем не менее, получить через переменную $php_errormsg. Проверьте настройки в файле php. ini и убедитесь, что последняя ошибка хранится в этой переменной. Этой переменной всегда присваивается сообщение, соответствующее последней ошибке, поэтому сообщение должно быть обработано прежде, чем произойдет другая ошибка.
Теперь мы можем предпринять корректирующие действия, если возвращается значение 0, и программно определить, выводить сообщение об ошибке или нет. Это иллюстрируется следующим примером:
<?php
//Error_Msg_Suppress. php
$verbose = 1; //устанавливает подробный или краткий вывод сообщения об ошибке $default_text = "A default line of text";
//Попытка открыть файл и прочесть из него строку текста if ($file = @fopen("nosuchfile.txt", "г")) {
$text - (fgets($file, 101)); } elseif ($verbose) {