Интерфейси

Интерфейсите позволяват да се дефинират методите, които даден клас задължително трябва да реализира, без да се декларират самите тела на тези методи.

Интерфейсите се дефинират чрез ключовата дума interface, аналогично на обикновен клас, но без да се декларират телата на методите му.

Всички методи, дефинирани в даден интерфейс, трябва да бъдат public, поради спецификата на интерфейса.

implements

За да се укаже, че даден клас осъществява определен интерфейс, се използва операторът implements. Всички методи на интерфейса трябва да бъдат реализирани в класа. Неосъществяването на метод предизвиква Фатална Грешка. Даден клас може да изпълни и повече от един интерфейс, като имената на интерфейсите в този случай се разделят със запетая.

Забележка: Даден клас не може да реализира два интерфейска, ако те имат методи с еднакви имена, тъй като това води до неопределеност.

Примери

Пример 19-18. Пример за interface

<?php
// Декларация на интерфейс 'iTemplate'
interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}

// Осъществяване на интерфейса
// Това ще работи
class Template implements iTemplate
{
    private $vars = array();
  
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
  
    public function getHtml($template)
    {
        foreach($this->vars as $name => $value) {
            $template = str_replace('{' . $name . '}', $value, $template);
        }
 
        return $template;
    }
}

// Това няма да работи
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
    private $vars = array();
  
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
}

?>

Вж. също оператора instanceof.