В PHP поддерживаются понятия абстрактного класса и интерфейса.
Абстрактный класс может использоваться только в качестве базового, т.е. нельзя создать объект абстрактного класса при помощи конструкции new. Методы абстрактного класса могут не иметь реализации (т.е. специфицируется только вызов, а сам программный код метода может отсутствовать). Абстрактный класс задается ключевым словом abstract перед именем класса.
Интерфейс – это класс, в котором определены только методы, но нет ни одной реализации. В качестве базовых классов для класса могут указываться помимо одного «настоящего класса» еще и несколько интерфейсов. В этом случае класс должен содержать реализации для всех методов, определенных в интерфейсах. Интерфейсы перечисляются в заголовке класса после ключевого слова implements.
Примеры абстрактных классов и интерфейсов:
<?php // абстрактный класс abstract class Screen_Obj_Class { protected $x1; protected $y1; protected $x2; protected $y2;
public function width() { return $this->x2 - $this->x1; } }
// это интерфейс 1 interface print_data { function print_x1(); }
// это интерфейс 2 interface display_data { function display_x1(); }
// класс наследует абстрактный класс и реализует интерфейсы class Label_Class extends Screen_Obj_Class implements print_data, display_data { public $label;
// это реализация интерфейса 1 function print_x1() { echo "<br />interface 1: x1 = $this->x1<br />"; }
// это реализация интерфейса 2 function display_x1() { echo "<br />interface 2: x1 = $this->x1<br />"; } };
$l1 = new Label_Class(); $l1->setCoord( 10, 10, 25, 25 );
// вызываем метод абстрактного класса echo $l1->width();
// вызываем метод реализации интерфейса 1 echo $l1->print_x1();
// вызываем метод реализации интерфейса 2 echo $l1->display_x1(); ?>