Разделы
My CV | vvShop © 2008 – 2019
Контакты
email: [email protected]
skype: utz0r2
Вернуться
» » » 2. Коротко ООП PHP - Принципы: инкапсуляция, полиморфизм, наследование

2. Коротко ООП PHP - Принципы: инкапсуляция, полиморфизм, наследование


Обьект Car в жизни это слишком обобщенно. Поэтому создадим машины унаследовав родитель-класс Car (наследование), имзеним их свойства и методы при необходимости (полиморфизм), и ограничим области видимости свойств и методов с помощью спецификаторов доступа private, protected, public ( инкапсуляция(сокрытие внутренних процессов)).
<?php
class Car {

	const DOORS = 5;
	const TYPE = 'хетчбек';

	// инкапсуляция	(ограничили область видимости свойств odo только классом Car и его наследникми)
	protected $odo;
	
	public $fuel = 100;
	public $speed = 0;

	public function run( $speed = 0, $time = 0 ) {
		$this->speed = $speed;
		$this->odo = $speed*$time;
		return 'Движемся со скоростью: ' . $speed . ' км/ч. В течении '  .$time . ' часов <br/>';
	}

	public function stop() {
		$this->speed = 0;
		return 'Остановились, наша скорость: 0 км/ч <br/>' . $this->getOdo();
	}

	// инкапсуляция (ограничили область видимости метода getOdo только классом Car)
	private function getOdo () {
		return 'Проехали дистанцию: ' . $this->odo . ' км <br/>';
	}
	
}

// наследование (наследуем класс родитель Car)
class Zaz extends Car {
	
	// полиморфизм (переопределили константы DOORS и TYPE для Zaz)
	const DOORS = 4;
	const TYPE = 'седан';
	
	// полиморфизм (переопределили свойство $fuel)
	public $fuel = 40;

	// расширили новым методом zagloh только для класса Zaz 
	public function zagloh () {
		return 'Заглох... <br/>';
	}
	
}

// наследование (наследуем класс родитель Car)
class Amfibia extends Car {

	// полиморфизм (переопределили метод run, все остальное осталось от класса Car)
	public function run ( $speed = 0, $time = 0, $water = 0 ) {
		$this->speed = $water == 1? $speed/3 :	$speed;
		$this->odo = $this->speed*$time;
		return 'Движемся со скоростью: ' . $this->speed . ' км/ч. В течении '  .$time . ' часов <br/>';
	}
	
	// рашсирили родительский метод stop
	public function stop() {
		return 'Пшшшш... ' . parent::stop();
	}
	
}


// Cоздаем экземпляр объекта класса Zaz
$car = new Zaz();
echo 'У машины: ' . $car::DOORS . ' двери<br/>';
echo 'Тип машины: ' . $car::TYPE . '<br/>';
echo 'В баке: ' . $car->fuel . ' л топлива<br/>';
echo 'Текущая скорость машины: ' . $car->speed . ' км/ч<br/>';
echo $car->run();
echo $car->zagloh();
echo $car->run(60, 10);
echo $car->stop();

// Cоздаем экземпляр объекта класса Amfibia
$car2 = new Amfibia();
echo 'По воде: ' . $car2->run(60, 10, 1);
echo $car2->stop();
Оставить комментарий
Вверх