Наследование классов
/*
Создание простого дома
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
*/