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




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

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

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

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

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

<?php

throw new Exception('My exception message');

?>

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

<?php

try

{

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

}

catch(Exception $ex)

{

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

}

?>

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

 

Пример:

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

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

Пример:

Задание 7

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

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

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

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

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

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

При объявлении константы не нужно указывать спецификатор доступа и обязательно указывать ключевое слово 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



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: