Абстракция против интерфейса (oop в PHP)
Абстрактный класс не может быть создан, да, это класс, однако никому не разрешено создавать экземпляры, но, поскольку мы не можем создать его экземпляр, нам пришлось бы создать подкласс, который наследует абстрактный класс.
<?php
abstract class exampleAbstract {
}
class exampleClass extends exampleAbstract {
}
Однако есть и абстрактный метод, мы можем использовать абстрактный класс для создания абстрактного защищенного метода. Более того, этот абстрактный метод, который может быть создан только с использованием абстрактного класса, должен использоваться всеми подклассами, наследующими абстрактный класс. Таким образом, все классы, наследующие абстрактный класс, должны использовать этот метод в своих собственных версиях одного и того же метода.
<?php
abstract class exmapleAbstract {
abstract protected function exampleMethod();
}
class exampleClass extends exampleAbstarct {
abstract protected function exampleMethod()
{
return ' ';
}
Интерфейс подобен контракту, который определяет общедоступный API, поэтому он определяет контракт, который должен соблюдать каждый класс, который его реализует. Однако никакая логика никогда не может быть сохранена в интерфейсе, что делает его очень дешевым в использовании. Интерфейс не обязательно должен наследоваться классом, который должен использовать его метод, вместо этого он должен быть реализован.
<?php
interface exampleInterface {
public function exampleMethod();
}
class exampleClass implements exampleInterface {
public function exampleMethod()
{
return ' ';
}