ООП   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 - визуальные среды

Знаете ли Вы, что такое "усталость света"?
Усталость света, анг. tired light - это явление потери энергии квантом электромагнитного излучения при прохождении космических расстояний, то же самое, что эффект красного смещения спектра далеких галактик, обнаруженный Эдвином Хабблом в 1926 г.
На самом деле кванты света, проходя миллиарды световых лет, отдают свою энергию эфиру, "пустому пространству", так как он является реальной физической средой - носителем электромагнитных колебаний с ненулевой вязкостью или трением, и, следовательно, колебания в этой среде должны затухать с расходом энергии на трение. Трение это чрезвычайно мало, а потому эффект "старения света" или "красное смещение Хаббла" обнаруживается лишь на межгалактических расстояниях.
Таким образом, свет далеких звезд не суммируется со светом ближних. Далекие звезды становятся красными, а совсем далекие уходят в радиодиапазон и перестают быть видимыми вообще. Это реально наблюдаемое явление астрономии глубокого космоса. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМАФорум Рыцари теории эфира
Рыцари теории эфира
 03.07.2020 - 11:23: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от проф. В.Ю. Катасонова - Карим_Хайдаров.
03.07.2020 - 11:16: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> КОМПЬЮТЕРНО-СЕТЕВАЯ БЕЗОПАСНОСТЬ ДЛЯ ВСЕХ - Карим_Хайдаров.
03.07.2020 - 09:27: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
02.07.2020 - 16:28: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Пламена Паскова - Карим_Хайдаров.
02.07.2020 - 06:41: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вячеслава Осиевского - Карим_Хайдаров.
01.07.2020 - 20:08: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
01.07.2020 - 20:07: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
01.07.2020 - 20:06: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Владимира Васильевича Квачкова - Карим_Хайдаров.
01.07.2020 - 05:39: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
01.07.2020 - 04:20: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
30.06.2020 - 19:53: СОВЕСТЬ - Conscience -> РУССКИЙ МИР - Карим_Хайдаров.
29.06.2020 - 16:12: ТЕОРЕТИЗИРОВАНИЕ И МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ - Theorizing and Mathematical Design -> ФУТУРОЛОГИЯ - прогнозы на будущее - Карим_Хайдаров.
Bourabai Research Institution home page

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