русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Исключения


Дата добавления: 2013-12-23; просмотров: 1025; Нарушение авторских прав


Серьезные ошибки

Несерьезные ошибки

Для обработки нефатальных ошибок, в РНР имеется инструмент, называемый перехватом ошибок. Метод заключается в том, что в программе пишется специальная функция — обработчик ошибки, которая вызывается РНР всякий раз, когда наступает та или иная ошибочная ситуация..

<?php ## Перехват ошибок и предупреждений.

// Определяем новую функцию-обработчик.

function myErrorHandler($errno, $msg, $file, $line) {

// Если используется @, ничего не делать.

if (error_reporting() == 0) return;

// Иначе — выводим сообщение.

echo '<div style="border-style:inset; border-width:2">';

echo "Произошла ошибка с кодом <b>$errno</b>!<br>";

echo "Файл: <tt>$file</tt>, строка $line.<br>";

echo "Текст ошибки: <i>$msg</i>";

echo "</div>";

}

// Регистрируем ее для всех типов ошибок.

set_error_handler("myErrorHandler", E_ALL);

// Вызываем функцию для несуществующего файла, чтобы

// сгенерировать предупреждение, которое будет перехвачено,

filemtime ("spoon") ;

?>

При нефатальных ошибках, программа всегда продолжает свою работу — просто в момент возникновения ошибочной ситуации вызывается функция-обработчик, а затем выполнение идет дальше.

Серьезные ошибки в общем случае невозможно обработать с использованием set_error_handler(), потому что в каждом конкретном случае необходимо писать "персональный" код восстановления.

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



Практически все стандартные функции РНР в случае возникновения ошибочной ситуации возвращают false или null, а также вызывают trigger_error() для фиксирования диагностического сообщения. Например, функция fopen() при невозможности открытия файла возвращает false, и мы должны проверить результат на истинность.

Исключения (exceptions) — это технология, позволяющая писать код восстановления после серьезной ошибки в удобном для программиста виде. С применением исключений перехват и обработка ошибок значительно упрощается.

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

Исключение — это некоторое сообщение об ошибке. При своей генерации оно автоматически передается в обработчик исключения. Любое исключение в программе представляет собой объект некоторого класса, создаваемый, как обычно, оператором new. Этот объект может содержать различную информацию, например, текст диагностического сообщения, а также номер строки и имя файла, в которых произошла генерация исключения. Допустимо добавлять и любые другие параметры.

Для работы с исключениями используют конструкции try...catch.

Код обработчика исключения помещается в блок инструкции catch(Exception $e). Аргумент блока catch определяет, в какую переменную должен быть записан перехваченный объект-исключение перед запуском кода обработчика. Также обязательно задается тип исключения — имя класса. Обработчик будет вызван только для тех объектов-исключений, которые совместимы с указанным типом (например, для объектов данного типа).

В блоке tryразмещается код, который может сгенерировать исключение. Любые исключения, сгенерированные внутри него (и только они), будут переданы соответствующему обработчику.

Инструкция throwиспользуется для генерации исключения. Генерацию также называют возбуждением или даже выбрасыванием исключения. Инструкция throw не просто генерирует объект-исключение и передает его обработчику блока catch. Она также немедленно завершает работу текущего try-блока. Любое исключение представляет собой обычный объект РНР, который мы и создаем в операторе new.

<?php ## Простой пример использования исключений,

echo "Начало программы.<br>";

try {

// Код, в котором перехватываются исключения.

echo "Все, что имеет начало...<br>";

// Генерируем ("выбрасываем") исключение.

throw new Exception("Hello!");

echo "...имеет и конец.<br>";

} catch (Exception $e) {

// Код обработчика.

echo " Исключение: {$e->getMessage()}<br>";

}

echo "Конец программы.<br>";

?>

//результат работы сценария Начало программы.

Все, что имеет начало...

Исключение: Hello!

Конец программы.

 



<== предыдущая лекция | следующая лекция ==>
Виды ошибок | Перехват всех исключений


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.