Интерфейсы объектов

20 августа 2018
Интерфейс это обёртка с объявлением публичных методов, которые должны быть определены (реализованы) в классе, наследующий интерфейс.

Интерфейс объявляется с помощью ключевого слова interface
interface a
{
	const prop_1 = 'Привет';

	public function __construct();

	public function f1();
	public function f2($b, $c);
	public function f3($e);
}

В классе, наследующий интерфейс, должны быть определены все методы и конструктор, если он был объявлен
class b implements a
{
	private $date;

	public function __construct()
	{
		$this->date = date('d.m.Y H:i:s');
	}

	public function f1()
	{
		return 'ААА';
	}

	public function f2($b, $c)
	{
		return $b.$c;
	}

	public function f3($e)
	{
		return self::prop_1.' '.$e;
	}

	public function get_date()
	{
		return $this->date;
	}
}

$w = new b();
echo $w->get_date(); /* Выведет текущую дату */
echo $w->f3('Владимир'); /* Выведет 'Привет Владимир' */

Особенности интерфейсов

1) Интерфейс может происходить от нескольких интерфейсов-предков с помощью оператора extends
interface c extends a, b

2) Методы интерфейса могут быть только публичными;

3) Интерфейса могут содержать только методы, константы и конструктор;

4) Класс может реализовывать несколько интерфейсов
class A implemenets B, C, D

5) Класс одновременно может наследовать другой класс и интерфейсы
class A extends E implemenets B, C, D

6) Если в классе не реализуется какой-либо метод интерфейса, то класс должен быть объявлен как абстрактный. В ином случае возникнет ошибка
abstract class g implements a
{
	private $date;

	public function __construct()
	{
		$this->date = date('d.m.Y H:i:s');
	}

	public function f1()
	{
		return 'ААА';
	}

	public function f2($b, $c)
	{
		return $b.$c;
	}
}