Интерфейс и абстрактный класс
Интерфейс
Интерфейс указывает, какие методы должны быть в классе.
Применить интерфейс к классу можно через ключевое слово implements
.
interface BaseTemplate { public function setVariable($name, $var); public function getHtml($template); } class Template implements BaseTemplate { public function setVariable($name, $var) { // код } public function getHtml($template) { // код } }
Если класс Template
не содержал бы метод getHtml
, то отобразилась бы ошибка «Fatal Error».
Для класса можно указывать несколько интерфейсов.
class Template implements BaseTemplate, SecondTemplate { // код }
Абстрактный класс
Указать обязательные методы можно также через абстрактный класс, который создаётся через ключевое слово abstract
.
abstract class BaseTemplate { abstract function setVariable($name, $var); } class Template extends BaseTemplate { public function setVariable($name, $var) { // код } }
Методы, определённые через ключевое слово abstract
должны быть переопределены в дочернем классе, иначе выведется ошибка «Fatal error».
Если в классе есть абстрактный метод, то класс должен быть задан как абстрактный.
Нельзя создавать объект из абстрактного класса.
abstract class BaseTemplate { abstract function setVariable($name, $var); } // При создание объекта из абстрактного класса будет происходить ошибка $template = new BaseTemplate(); // Fatal Error
Одно из основных различий между интерфейсом и абстрактного класса в том, что класс может наследоваться только от одного абстрактного класса, а интерфейсов у него может быть несколько.
Авторизуйтесь, чтобы добавлять комментарии