Интерфейсы предназначены для описания каких-либо общих элементов, используемых в разных классах. Интерфейсы описывают public методы, которые представляют собой только название метода, описание их аргументов и возвращаемый тип. Тело метода в интерфейсе не описывается.
interface CalculateSquare
{
public function calculateSquare(): float;
}
Чтобы обязать класс реализовать этот интерфейс нужно использовать ключевое слово implements
class Circle implements CalculateSquare
{
...
}
Класс может реализовывать сразу несколько интерфейсов. В таком случае, они перечисляются через запятую.
class Circle implements CalculateSquare, Interface2, Interface3
{
...
}
Класс должен реализовывать все методы, которые прописаны в интерфейсе. Если какой-либо метод отсутствует то результатом работы программы будет ошибка.
Для проверки является ли какой-либо объект реализацией какого-то интерфейса или экземпляром какого то класса, используется ключевое слово instanceof
.
Пример
<?php
interface CalculateSquare
{
public function calculateSquare(): float;
}
class Circle implements CalculateSquare
{
const PI = 3.1416;
private $r;
public function __construct(float $r)
{
$this->r = $r;
}
public function calculateSquare(): float
{
return self::PI * ($this->r ** 2);
}
}
class Rectangle
{
private $x;
private $y;
public function __construct(float $x, float $y)
{
$this->x = $x;
$this->y = $y;
}
public function calculateSquare(): float
{
return $this->x * $this->y;
}
}
class Square implements CalculateSquare
{
private $x;
public function __construct(float $x)
{
$this->x = $x;
}
public function calculateSquare(): float
{
return $this->x ** 2;
}
}
$objects = [
new Square(5),
new Rectangle(2, 4),
new Circle(5)
];
foreach ($objects as $object) {
if ($object instanceof CalculateSquare) {
echo 'Объект реализует интерфейс CalculateSquare. Площадь: ' . $object->calculateSquare();
echo '<br>';
}
}
Результат
Объект реализует интерфейс CalculateSquare. Площадь: 25
Объект реализует интерфейс CalculateSquare. Площадь: 8
Объект реализует интерфейс CalculateSquare. Площадь: 78.54
Функция get_class
get_class($object):string
Возвращает имя класса, к которому принадлежит объект
Пример
<?php
class foo {
function name()
{
echo "Меня зовут " , get_class($this) , "\n";
}
}
// создание объекта
$bar = new foo();
// внешний вызов
echo "Его имя " , get_class($bar) , "\n";
// внутренний вызов
$bar->name();