ООП   PHP   web   4GL - визуальные среды

Обработка исключений ООП в PHP

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

Исключение — это некий участок кода, где может произойти ошибка. Ошибка на языке ООП — это и есть исключение.

Эта ошибка не синтаксическая, а скорее логическая. И мы при программировании приложения, заранее можем знать, где она произойдет. Это очень похоже на оператор if(){} else{} — если условие истинно, выполняется один блок кода, если условие ложно, выполняется другой блок кода.

Итак, как же записываются исключения?

Прежде чем переходить к синтаксису исключений, давайте взглянем на этот пример:

<?php
$a = 1;
$b = 0;

echo $a/$b;
?>

Смотрите, у нас есть некие переменные, которым присваиваются значения и далее одна переменная делится на другую. А вот теперь давайте подумаем, каким образом отлавливаются ошибки?

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

Так вот в процедурном программировании мы бы написали условие if(){} else{}, и если бы произошло деление на ноль, мы бы аккуратно дали знать об этом пользователю.

А объектно-ориентированном программировании, мы заключаем данный код в конструкцию try{} catch(exception $e){}:

<?php
try{
	$a = 1;
	$b = 0;
	echo $a/$b;
}
catch(exception $e){

}
?>

Теперь, мы знаем, что в блоке try{} может произойти ошибка. Поэтому мы генерируем исключение следующей конструкцией:

<?php
try{
	$a = 1;
	$b = 0;
	if($b == 0) throw new Exception("Деление на 0 запрещено!");
	echo $a/$b;
}
catch(exception $e){

}
?>

Итак, что мы здесь видим? А видим мы знакомое нам слово new Exception. Знакомое? Конечно! Из чего мы делаем вывод, что Exception — это встроенные класс, а в скобках — это то, что идет в конструктор этого класса.

Однако, здесь все немного сложнее. Мы знаем, что до этого мы объект присваивали переменной и создавали экземпляр класса ($переменная = new Класс()). Здесь же экземпляр класса, с помощью слова throw создается как бы «на лету», то есть он никуда не присваивается. И смотрите, что происходит далее — он (экземпляр класса Exception) попадает автоматом в переменную $e блока catch.

А теперь вопрос: что означает слово exception перед переменной $e (exception $e)?

Слышали ли вы когда-нибудь о строго-типизированных языках? Для тех, кто не знает скажу — это языки, в которых прежде, чем объявить переменную нужно заранее объявить ее тип. Например, мы объявили переменную string $a, значить в этой переменной должно быть только строковое значение. В PHP этого нет. Поэтому слово exception перед переменной $e — это такой первый шаг PHP навстречу строгой типизации. Это говорит о том, что в переменной $e может быть только экземпляр класса exception и не что иное.

Далее, у класса exception есть несколько методов, которые обрабатывают ошибки:

  1. метод getMessage() — выводит сообщение об ошибке;
  2. метод getLine() — выводит номер строки, где произошла ошибка;
  3. метод getFile() — выводит имя файла, в котором произошла ошибка;
<?php
try{
	$a = 1;
	$b = 0;
	if($b == 0) throw new Exception("Деление на 0 запрещено!");
	echo $a/$b;
}
catch(exception $e){
	echo "Произошла ошибка - ",
	$e->getMessage(),
	" в строке ",
	$e->getLine(),
	" файла ",
	$e->getFile();
}
?>

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

Евгений Владимирович Андреев

ООП   PHP   web   4GL - визуальные среды

Знаете ли Вы, что релятивистское объяснение феномену CMB (космическому микроволновому излучению) придумал человек выдающейся фантазии Иосиф Шкловский (помните книжку миллионного тиража "Вселенная, жизнь, разум"?). Он выдвинул совершенно абсурдную идею, заключавшуюся в том, что это есть "реликтовое" излучение, оставшееся после "Большого Взрыва", то есть от момента "рождения" Вселенной. Хотя из простой логики следует, что Вселенная есть всё, а значит, у нее нет ни начала, ни конца... Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМАФорум Рыцари теории эфира
Рыцари теории эфира
 14.10.2019 - 19:26: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вячеслава Осиевского - Карим_Хайдаров.
14.10.2019 - 03:09: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Марины Мелиховой - Карим_Хайдаров.
13.10.2019 - 18:09: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Светланы Вислобоковой - Карим_Хайдаров.
13.10.2019 - 08:05: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Декларация Академической Свободы - Карим_Хайдаров.
13.10.2019 - 08:03: ЭКОЛОГИЯ - Ecology -> Биохимия мозга от проф. С.В. Савельева и не только - Карим_Хайдаров.
12.10.2019 - 07:03: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Константина Сёмина - Карим_Хайдаров.
11.10.2019 - 08:59: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от О.Н. Четвериковой - Карим_Хайдаров.
11.10.2019 - 06:24: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
11.10.2019 - 03:57: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ЗА НАМИ БЛЮДЯТ - Карим_Хайдаров.
11.10.2019 - 03:33: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
11.10.2019 - 03:22: ЭКОЛОГИЯ - Ecology -> Глобальное потепление - миф или... миф? - Карим_Хайдаров.
09.10.2019 - 19:01: ТЕОРЕТИЗИРОВАНИЕ И МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ - Theorizing and Mathematical Design -> ФУТУРОЛОГИЯ - прогнозы на будущее - Карим_Хайдаров.
Bourabai Research Institution home page

Bourabai Research - Технологии XXI века Bourabai Research Institution