Какую роль в этом коде (из книги) играют абстрактные классы?
<meta charset="UTF-8">
<?php
trait GetSumLine {
function CalculTax($price){
return ( ( $this->expirience() ) * $price );
}
abstract function expirience();
}
abstract class Service{
//Сервис
}
class Object{
use GetSumLine {
GetSumLine::CalculTax as private;
}
function __construct($price){
$this->price = $price;
}
public function expirience(){
return 20;
}
public function GetEndSum(){
return ($this->CalculTax($this->price));
}
}
$doc = new Object(320);
print "{$doc->GetEndSum()}";
В качестве примера:
Классы Bear и Monkey наследуются от абстрактного класса Animal, в игре про зоопарк, для того чтобы узнать можно или нельзя кормить животное экземплярами классов Banana и Honey, которые наследуют класс Food, у Animal вы добавляете метод без реализации canEat(Food) а в классах-наследниках уже реализуете его в соответствии с их логикой.
Польза здесь вот в чем: теперь во всех местах где вы захотите узнать можно ли накормить животное едой вы будете оперировать классами еда и животное, при этом, когда вы захотите добавить в игру свинью и трюфели вам не придется менять уже написанный код, который оперирует животными и едой.
Это касается как интерфейсов так и абстрактных классов, можно считать что интерфейс это вырожденый случай абстрактного класса.
Основная цель абстрактных классов - практическая реализация полиморфизма, то есть базовое описания методов, которые должны быть переопределены в классах потомках.
Продвижение своими сайтами как стратегия роста и независимости