Да, и интерфейсы и абстрактные классы в 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 для формальных параметров функций / методов можно задать имя класса / интерфейса - в качестве типа параметра. И если это будет имя интерфейса, то автоматически гарантируется, что переданный методу объект содержит необходимый функционал.
PHP
Есть ли интерфейсы и абстрактные классы в РНР?
Интерфейсы начиная с пятой версии есть а абстрактные классы с рождения ...
Ну, так как это скриптовый язык, то интерфейсы в явном виде там не нужны, всё и так будет работать, например можно передать объекты абсолютно разных классов в функцию, и у этого объекта вызвать какую-либо функцию, которая есть по всех классах - и это будет работать.
То же самое касается и абстрактных классов - они же не имеют реализации методов, а значит вообще в них нет смысла в рамках языка 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()
{
}
}
То же самое касается и абстрактных классов - они же не имеют реализации методов, а значит вообще в них нет смысла в рамках языка 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()
{
}
}
Похожие вопросы
- почему до сих пор пишут сайты на РНР, если есть конструкторы сайтов?
- РНР: Для чего нужны порождающие шаблоны проектирования? В двух словах
- Как задать интервал в РНР?
- Создайте простой пример для реализации MVC-архитектуры на РНР для веб-приложений, включающий список пользователей.
- Задача: Web-интерфейс БД зарегистрированных пользователей сайта
- PHP: для чего нужны интерфейсы?
- Объекты и классы в ООП? Для чего?
- Подскажите зачем в Яве интерфейсы и абстрактные классы
- какая разница между интерфейсом и абстрактным классом? И есть она принципиальная ?. Приведите примеры.
- Чем абстрактный класс отличается от интерфейса?
2. Даже в PHP 5 параметры - объекты могут быть типизированы (а в PHP 7 не только объекты).
В результате, правильное использование интерфейсов гарантирует, что используемым в данном месте объект имеет реализацию необходимого в этом месте метода. Что многократно снижает вероятность ошибок.