Storm-coder
10/26/2017 - 6:59 PM

Наследование классов

Наследование классов

/*
Создание простого дома
square - площадь дома
*/

// Создание супер-класса
class SimpleHouse {

	public $model = "";
	public $square = 0;
	public $floors = 0;
	public $color = "none";
// Конструктор класса
	function __construct($model, $square = 0, $floors = 1){
		$this->model = $model;
		$this->square = $square;
		$this->floors = $floors;
	}

	function startProject(){
		echo "Start. Model: {$this->model}" . "<br>";
	}

	function stopProject(){
		echo "Stop. Model: {$this->model}" . "<br>";
	}

	function build(){
		echo "Build. House: {$this->square}x{$this->floors}" . "<br>";
	}

	function paint(){
		echo "Paint. Color: {$this->color}" . "<br>";
	}

}

// Создание простого дома (начинаем строить дом)
$simple = new SimpleHouse("A-100-123", 120, 2); // номер модели, 120 м/кв, 2 этажа
$simple -> color = "red";
$simple -> startProject();
$simple -> build();		// строем 
$simple -> paint();		// красим
$simple -> stopProject();

/*
=>
Start. Model: A-100-123
Build. House: 120x2
Paint. Color: red
Stop. Model: A-100-123

*/
/* Построили дом. Приходит человек и говорит, что все в этом доме нравится. Но в нем чего-то нехватает. Хочу, чтобы в нем был камин и что-то еще... */


// Создание класса-наследника (SuperHouse наследует свойства и методы SimpleHouse)
class SuperHouse extends SimpleHouse{

		// добавляем новые свойства
	public $fireplace = true; // камин
	public $patio = true; 	// внутренний дворик

		// добавляем новый метод (разжигает камин)
	function fire(){
		if ($this -> fireplace)
		echo "Fueled fireplace" . "<br>";
	}

}

$super = new SuperHouse("A-100-125", 320, 3);
$super->color = "green";
$super->startProject();
$super->build();
$super->paint();
$super->fire(); 	// новый метод в дочернем классе SuperHouse
$super->stopProject();

/*
=>
Start. Model: A-100-123
Build. House: 120x2
Paint. Color: red
Stop. Model: A-100-123

Start. Model: A-100-125
Build. House: 320x3
Paint. Color: green
Fueled fireplace
Stop. Model: A-100-125
*/