Интерфейсы объектов в php
Интерфейсы объектов
Интерфейсы объектов позволяются создавать код, указывающий, какие методы должен реализовать класс, без необходимости определять, как именно они должны быть реализованы
Интерфейсы используются для
Интерфейсы объявляются с ключевым словом interface
Тело методов интерфейсов должно быть пустым
Все методы определенные в интерфейсе, должны быть общедоступными
Для реализации интерфейсов используется оператор implements
Класс должен реализовать все методы, описанные в интерфейсе, иначе произойдет фатальная ошибка
Класс может реализовывать несколько интерфейсов, разделяя каждый интерфейс запятой
Класс реализующий интерфейс, может использовать для своих параметров имя, отличное от имени итерфейса, но делать так е рекомендуется
Интерфейсы могут быть унаследованы друг от друга, так же как и классы, с помощью оператора extends
Класс реализующий интерфейс, должен объявить все методы в интерфейсе с совместимой сигнатурой
Интерфейсы могут содержать константы. До PHP 8.1.0 нельзя было переопределить константы, классом или интерфейсом, который их наследует
interface A
{
public function foo();
}
interface B extends A
{
public function baz(Baz $baz);
}
#Изменение модификатора доступа, типа и кол-ва аргументов приведет к ошибке
class C implements B
{
public function foo()
{
}
public function baz(Baz $baz)
{
}
}
#Совместимость с несколькими интерфейсами
class Foo {}
class Bar extends Foo {}
interface A
{
public function myfunc(Foo $arg): Foo;
}
interface B
{
public function myfunc(Bar $arg): Bar;
}
class MyClass implements A, B
{
public function myfunc(Foo $arg): Bar
{
return new Bar();
}
}
#Множественное наследование интерфейсов
interface A
{
public function Foo();
}
interface B
{
public function Bar();
}
interface C extends A, B
{
public function Baz();
}
class D implements C
{
public function Foo()
{
echo "Foo";
}
public function Bar()
{
echo "Bar";
}
public function Baz()
{
echo "Baz";
}
}
$obj1 = new D();
$obj1->Foo();
$obj1->Bar();
$obj1->Baz();
#Использование констант
interface A
{
const B = 'Константа интерфейса';
}
#Вывод значения константы
echo A::B;
class B implements A
{
// До PHP 8.1.0 этот код не будет работать,
// потому что было нельзя переопределять константы.
const B = 'Константа новое значение';
}
echo B::B;
#Одновременное расширение и внедрение
class A
{
}
interface B
{
}
interface C
{
}
class D extends A implements B, C
{
}
#Интерфейсы с асбстрактными классами
abstract class B implements A
{
.....
}
Источники
Связанные темы
Оператор разрешения видимости в php
Позднее статическое связывание
Методы создания экземпляра класса в php
Автоматическая загрузка классов
Наследование с помощью extends в php
Конструкторы и деструкторы в php