PHP

Есть ли интерфейсы и абстрактные классы в РНР?

Да, и интерфейсы и абстрактные классы в PHP есть. Интерфейсы не могут иметь реализаций методов - только определения. Потому для уменьшения дублирования кода в версии 5.4 появились трейты (trait).

http://php.net/manual/ru/language.oop5.abstract.php
http://php.net/manual/ru/language.oop5.interfaces.php
http://php.net/manual/ru/language.oop5.traits.php

Manunich элементарно не понимает, что такое ООП.

1. Интерфейс - это контракт. Класс, реализующий интерфейс, обязан определить все методы этого интерфейса.

2. Даже в PHP 5 для формальных параметров функций / методов можно задать имя класса / интерфейса - в качестве типа параметра. И если это будет имя интерфейса, то автоматически гарантируется, что переданный методу объект содержит необходимый функционал.
нк
николай кащеев
81 337
Лучший ответ
Интерфейсы начиная с пятой версии есть а абстрактные классы с рождения ...
Гоша Куценко
Гоша Куценко
59 848
Ну, так как это скриптовый язык, то интерфейсы в явном виде там не нужны, всё и так будет работать, например можно передать объекты абсолютно разных классов в функцию, и у этого объекта вызвать какую-либо функцию, которая есть по всех классах - и это будет работать.
То же самое касается и абстрактных классов - они же не имеют реализации методов, а значит вообще в них нет смысла в рамках языка php. Просто в каждом классе реализуй необходимый функционал и используй.

Наследование не абстрактных классов в php есть.

Upd: Поискал и нашёл, что интерфесы всё таки есть (http://php.net/manual/en/language.oop5.interfaces.php), вот только кто-нибудь сможет объяснить зачем они нужны в php?
В чём отличие классов

class A
{
public function foo()
{
}
}
class B
{
public function foo()
{
}
}

От классов

interface a
{
public function foo();
}
class A implements a
{
public function foo()
{
}
}
class B implements a
{
public function foo()
{
}
}
николай кащеев 1. Интерфейс - это контракт.
2. Даже в PHP 5 параметры - объекты могут быть типизированы (а в PHP 7 не только объекты).

В результате, правильное использование интерфейсов гарантирует, что используемым в данном месте объект имеет реализацию необходимого в этом месте метода. Что многократно снижает вероятность ошибок.