52680.fb2 Справочник по PHP - читать онлайн бесплатно полную версию книги . Страница 101

Справочник по PHP - читать онлайн бесплатно полную версию книги . Страница 101

Синтаксис:

void trigger_error(string error_msg [, int error_type])

Явно вызывает функцию, установленную для обработки ошибок, и обычно используется в паре с обработчиком ошибок. Функция способна генерировать только пользовательские типы ошибок ( семейство констант E_USER), и по умолчанию, если не указан тип ошибки error_type, он считается E_USER_NOTICE.

Возможно конструировать сложные конструкции генерации и обработки ошибок и исключительных ситуаций.

if(assert($divisor == 0))

trigger_error ("Нельзя делить на 0 ", E_USER_ERROR);

user_error

Синоним функции trigger_error().

Синтаксис:

void user_error(string error_msg [, int error_type])

Установка пользовательского обработчика ошибок

set_error_handler

Установка пользовательского обработчика ошибок.

Синтаксис:

string set_error_handler(string error_handler)

Функция возвращает имя функции, ранее определенной в качестве обработчика ошибок (или FALSE при ошибке), и устанавливает, в качестве нового обработчика, функцию с указанным в аргументе error_handler именем.

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

Функция, устанавливаемая в качестве обработчика ошибок, должна принимать пять параметров (три последних являются дополнительными и могут не обрабатываться):

<?php

// определить константы пользовательских ошибок

define(FATAL, E_USER_ERROR);

define(ERROR, E_USER_WARNING);

define(WARNING, E_USER_NOTICE);

// установить, какие ошибки должны обрабатываться в сценарии

error_reporting (FATAL | ERROR | WARNING);

// пользовательский обработчик ошибок

function myErrorHandler($errno,$errstr,$errfile,$errline) {

switch ($errno) {

case FATAL:

echo "<b>Критическая ошибка</b> [$errno] $errstr<br>n";

echo "в строке: $errline файла:".$errfile;

echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br>n";

echo "Aborting...<br>n";

exit -1;

break;

case ERROR:

echo "<b>Ошибка</b> [$errno] $errstr<br>n";

break;

case WARNING:

echo "<b>Предупреждение</b> [$errno] $errstr<br>n";

break;

default:

echo "Неизвестный тип ошибки: [$errno] $errstr<br>n";

}

}

// функция для проверки обработки ошибок

// (масштабирование массива

function scale_by_log($vect, $scale) {

if(!is_numeric($scale) || $scale <= 0)

trigger_error("вычислить log(x) для x <= 0 нельзя. ",

"(x = $scale)", FATAL);