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

Лабораторная работа ч.4 по объектно-ориентированному программированию на PHP

Продолжаем выполнять лабораторную работу по объектно-ориентированному программированию в PHP. Эта уже будет четвертая часть. Предыдущие три части можно найти тут: часть 1, часть 2, часть 3.

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

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

  1. сделать все параметры конструктора класса Users параметрами по умолчанию со значением «пустая строка» («»);
  2. в конструкторе класса Users сгенерировать исключение, если введены не все данные;
  3. описать перехват исключения и вывести в браузер сообщение об ошибке;
  4. создать экземпляр класса Users без какого-либо параметра;

На самом деле здесь все очень просто. Смотрите что должно было получиться:

<?php
class Users{
	public $name;
	public $login;
	public $password;
	
	//создание конструктора
	//ПЕРЕХВАТ ИСКЛЮЧЕНИЯ
	function __construct($name = "", $login = "", $password = ""){
		try{
			if($name == "" or $login == "" or $password == "")
				throw new Exception("Введены не все данные!");
				
			$this->name = $name;
			$this->login = $login;
			$this->password = $password;
		}catch(Exception $e){
			echo $e->getMessage();
		}
	}
	
	//создаем метод clone
	function __clone(){
		$this->name = "User";
		$this->login = "User";
		$this->password = "qwerty";
	}
	
	//создаем методод getInfo()
	function getInfo(){
		echo "<p>Name: ".$this->name."<br>";
		echo "Login: ".$this->login."<br>";
		echo "Password: ".$this->password."<br>";
	}
}
//У ЭКЗЕМПЛЯРА КЛАССА МЫ НЕ ВВОДИМ НИКАКИЕ ДАННЫЕ, В СВЯЗИ С ЭТИМ У НАС ВЫВЕДЕТЯ СООБЩЕНИЕ - "ВВЕДЕНЫ НЕ ВСЕ ДАННЫЕ"
$user1 = new Users();
	//выводим метод getInfo()
	$user1->getInfo();

$user2 = new Users("Petya", "pet", "321");
	//выводим метод getInfo()
	$user2->getInfo();

$user3 = new Users("Vova", "vov", "456");
	//выводим метод getInfo()
	$user3->getInfo();
//объект $user4 копия объекта $user3 
$user4 = clone $user3;
	$user4->getInfo();
?>

Как вы видите, ничего сложного здесь действительно нет. Однако, мы можем сделать такую вещь: мы можем от класса Exception унаследовать свой класс. Что это значит? Это значит, что мы можем писать свои обработчики ошибок для отлова исключительных ситуаций. Давайте посмотрим на пример, чтобы стало более понятно, что я имею ввиду:

<?php
//создаем свой класс nameException унаследованный от Exception
class nameException extends Exception{
	function __construct($message){
		$message .= " name!";
		//в данном случае мы не перегружаем конструктор родителя, так как, если в родительском конструкторе будут внесены изменения, то у нас ничего работать не будет
		parent::__construct($message);
	}
}
//создаем свой класс loginException унаследованный от Exception
class loginException extends Exception{
	function __construct($message){
		$message .= " login!";
		//и здесь мы не перегружаем конструктор родителя, так как, если в родительском конструкторе будут внесены изменения, то у нас ничего работать не будет
		parent::__construct($message);
	}
}
//создаем свой класс passwordException унаследованный от Exception
class passwordException extends Exception{
	function __construct($message){
		$message .= " password!";
		//и точно так же здесь мы не перегружаем конструктор родителя, так как, если в родительском конструкторе будут внесены изменения, то у нас ничего работать не будет
		parent::__construct($message);
	}
}

class Users{
	public $name;
	public $login;
	public $password;
	
	//создание конструктора
	//ПЕРЕХВАТ ИСКЛЮЧЕНИЯ
	function __construct($name = "", $login = "", $password = ""){
		//ТЕПЕРЬ ДЛЯ КАЖДОГО ПАРАМЕТРА МЫ ПРИМЕНЯЕМ СВОЙ ОБРАБОТЧИК ОШИБОК
		try{
			if($name == "")
				throw new nameException("Введите");	
			$this->name = $name;
			
			if($login == "")
				throw new loginException("Введите");
			$this->login = $login;
			
			if($password == "")
				throw new passwordException("Введите");
			$this->password = $password;
			
		}catch(nameException $e){
			echo $e->getMessage();
		}catch(loginException $e){
			echo $e->getMesage();
		}catch(passwordException $e){
			echo $e->getMessage();
		}
	}
	
	//создаем методод getInfo()
	function getInfo(){
		echo "<p>Name: ".$this->name."<br>";
		echo "Login: ".$this->login."<br>";
		echo "Password: ".$this->password."<br>";
	}
}
//У ЭКЗЕМПЛЯРА КЛАССА $user1 НЕТ ПАРОЛЯ, ПОЭТОМУ НАМ ВЫВЕДЕТСЯ СООБЩЕНИЕ: "ВВЕДИТЕ PASSWORD!"
$user1 = new Users("Vanya", "van");
	//выводим метод getInfo()
	$user1->getInfo();

$user2 = new Users("Petya", "pet", "321");
	//выводим метод getInfo()
	$user2->getInfo();

$user3 = new Users("Vova", "vov", "456");
	//выводим метод getInfo()
	$user3->getInfo();
//объект $user4 копия объекта $user3 
$user4 = clone $user3;
	$user4->getInfo();
?>

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

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

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

Знаете ли Вы, что, когда некоторые исследователи, пытающиеся примирить релятивизм и эфирную физику, говорят, например, о том, что космос состоит на 70% из "физического вакуума", а на 30% - из вещества и поля, то они впадают в фундаментальное логическое противоречие. Это противоречие заключается в следующем.

Вещество и поле не есть что-то отдельное от эфира, также как и человеческое тело не есть что-то отдельное от атомов и молекул его составляющих. Оно и есть эти атомы и молекулы, собранные в определенном порядке. Также и вещество не есть что-то отдельное от элементарных частиц, а оно состоит из них как базовой материи. Также и элементарные частицы состоят из частиц эфира как базовой материи нижнего уровня. Таким образом, всё, что есть во вселенной - это есть эфир. Эфира 100%. Из него состоят элементарные частицы, а из них всё остальное. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМАФорум Рыцари теории эфира
Рыцари теории эфира
 20.09.2019 - 04:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вячеслава Осиевского - Карим_Хайдаров.
18.09.2019 - 12:08: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> ПРОБЛЕМА ИСКУССТВЕННОГО ИНТЕЛЛЕКТА - Карим_Хайдаров.
18.09.2019 - 06:01: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Л.Г. Ивашова - Карим_Хайдаров.
17.09.2019 - 05:51: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ФАЛЬСИФИКАЦИЯ ИСТОРИИ - Карим_Хайдаров.
17.09.2019 - 05:41: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Андрея Тиртхи - Карим_Хайдаров.
16.09.2019 - 18:21: ЭКОНОМИКА И ФИНАНСЫ - Economy and Finances -> ПРОБЛЕМА КРИМИНАЛИЗАЦИИ ЭКОНОМИКИ - Карим_Хайдаров.
16.09.2019 - 03:11: СОВЕСТЬ - Conscience -> РУССКИЙ МИР - Карим_Хайдаров.
14.09.2019 - 18:23: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
13.09.2019 - 09:08: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
12.09.2019 - 17:47: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
08.09.2019 - 03:42: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от О.Н. Четвериковой - Карим_Хайдаров.
07.09.2019 - 07:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Декларация Академической Свободы - Карим_Хайдаров.
Bourabai Research Institution home page

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