Обработка исключительных ситуаций (исключений)

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

Потому очень принципиально Обработка исключительных ситуаций (исключений) уметь корректно выявлять и обрабатывать ошибки, которые могут появиться в скрипте. Для этого в PHP предвидено два механизма - обработка ошибок и обработка исключений.

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

Исключения - это какие-либо аварийные ситуации, возникающие при выполнении скрипта. В PHP исключение можно сгенерировать ("выкинуть", "вызвать") и изловить его. Исключение может сгенерироваться как интерпретатором, так и разработчиком.

Вызов исключения делается последующим образом:

throw new Обработка исключительных ситуаций (исключений) Exception('My exception message');

?>

Перехват исключения осуществляется при помощи конструкции try...catch. В общем виде эта конструкция записывается так:

try

{

// код, который может выкинуть исключение

}

catch(Exception $ex)

{

//$ex - экземпляр класса Exception либо его наследника

}

?>

Необходимо отметить, что блоков catch может быть много, по одному на каждый класс перехватываемых Обработка исключительных ситуаций (исключений) исключений. Таким макаром можно сделать фильтр исключений, т.е. перехватывать не все, а только избранные типы исключений, а все другие будут перехвачены стандартным обработчиком PHP.

Пример:

В данном примере код деления 1-го числа на другое заключен в блок try, чтоб перехватить и обработать ситуацию, если знаменатель (переменная $b) равен нулю. В данном Обработка исключительных ситуаций (исключений) случае генерируется новое исключение. Способы класса Exception (getMessage, getLine, getFile) позволяют получить детализированную информацию о перехваченном исключении.

По мере надобности можно сделать свой класс обработки исключений, унаследовав его от класса Exception. Свой класс обработки исключений - это удачный инструмент разработчика, дающий возможность вести логи, показывать сообщения об ошибках Обработка исключительных ситуаций (исключений), поменять ход выполнения скрипта и много других способностей.

Пример:

Задание 7

1. Сделайте все характеристики конструктора класса User параметрами по дефлоту со значениями "пустая строчка"("")

2. В конструкторе класса User генерируйте исключение, если введены не все данные

3. Опишите перехват исключения и выводите в браузер сообщение об ошибке

4. Попытайтесь сделать экземпляр класса User без какого-нибудь Обработка исключительных ситуаций (исключений) параметра(-ов)

Константы класса

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

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

Пример:

Создается константа HANDS. Показано, как обратиться к ней снутри класса и за его пределами.

Задание 8

1. Сделайте константу класса User INFO_TITLE;

2. Присвойте константе INFO_TITLE строковое значение "Данные юзера:";

3. Обратитесь к константе INFO_TITLE перед Обработка исключительных ситуаций (исключений) вызовами способа showInfo();

4. Запустите код и проверьте его работоспособность;

5. Сделайте способ showTitle() в классе User;

6. Опишите способ showTitle(), чтоб он выводил в браузер значение константы; INFO_TITLE;

7. Обратитесь к способ showTitle() перед вызовами способа showInfo().

МОДУЛЬ 2


obosnovanie-potrebnosti-v-obemah-kulturno-bitovogo-obsluzhivaniya-razlichnogo-tipa.html
obosnovanie-predpolozhitelnogo-diagnoza.html
obosnovanie-prinyatih-reshenij.html