Интерфейсы
Краткое описание
Также в PHP5 появились интерфейсы. Класс может реализовывать любое количество интерфейсов. Интерфейс не может иметь свойств и должен содержать только общедоступные? методы. Класс, который реализует интерфейс не полностью, должен быть объявлен как абстрактный. Интерфейс определяется ключевым словом interface вместо class. Класс реализует интерфейсы используя ключевое слово implements после имени класса или имени класса-предка со списком интерфейсов через запятую.
Пример:
<?php
interface Throwable {
//public $property; // Fatal error: Interfaces may not include member variables
//private function someMethod(); // Fatal error: Access type for interface method Throwable::someMethod() must be omitted or declared public
public function getMessage();
}
interface Catchable {
public function getLocation();
}
class MyExceptionBase {}
//class MyBadException implements Throwable, Catchable {} // Fatal error: Class MyBadException contains 2 abstract methods and must therefore be declared abstract (Throwable::getMessage, Catchable::getLocation)
class MyException extends MyExceptionBase implements Throwable, Catchable {
public function getMessage() {
echo "MyException::getMessage() вызван.\n";
}
public function getLocation() {
echo "MyException::getLocation() вызван.\n";
}
}
$o = new MyException();
$o->getMessage();
$o->getLocation();
?>
Результат:
Проблемы с обратной совместимостью
Старый код без пользовательских функций, методов или классов с именами interface или implements должен работать без изменений.
Дополнительные сведения
Описание в оригинальной документации:
http://www.php.net/oop5.interfaces