Все пользователи Сети знают, как порой неприятно открывать страницу и видеть вместо долгожданной статьи/блога/картинки некий маловразумительный текст, сообщающий об ошибке сервера. К сожалению, реальность Интернет такова, что очень сложно сделать скрипт, одинаково хорошо работающий на любой платформе и при любых настройках сервера.
Поэтому очень важно уметь корректно выявлять и обрабатывать ошибки, которые могут возникнуть в скрипте. Для этого в 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