|
|||||||
Создание и использование интерфейсов в PHP
Время создания: 04.04.2013 19:39
Раздел: Компьютер - Программирование - Язык PHP
Запись: xintrea/mytetra_syncro/master/base/13650899899els6xtisj/text.html на raw.github.com
|
|||||||
|
|||||||
Создание и использование интерфейсов Интерфейсы во многом схожи с абстрактными классами. Интерфейс - это шаблон, который задает поведение одного или более классов. Вот основные отличия между интерфейсами и абстрактными классами:
Как и абстрактный класс, интерфейс объявляет несколько методов, которые должны быть реализованы в любом классе, который имплементирует данный интерфейс. Синтаксис выглядит так: interface MyInterface { public function aMethod(); public function anotherMethod(); } Чтобы создать класс, который имплементирует тот или иной интерфейс, напишите так: class MyClass implements MyInterface {
public function aMethod() { // (имплементация метода) }
public function anotherMethod() { // (имплементация метода) }
} Интерфейсы полезны в случаях, когда нужно создать несколько несвязанных между собой классов, у которых будет общая функциональность. Например, веб-форум может содержать класс Member для участников форума и класс Topic для тем, создаваемых участниками форума. В отношении наследования, эти классы скорее всего не будут зависеть друг от друга, так как они выполняют совершенно разные функции. Тем не менее, давайте предположим, что нам нужно будет доставать их и записывать в базу данных как объекты класса Member, так и объекты Topic. Для этого мы создадим интерфейс Persistable, в котором будут методы для сохранения объектов в БД и извлечения их оттуда: interface Persistable {
public function save(); public function load(); public function delete();
} Теперь давайте создадим класс Member и имплементируем для него интерфейс Persistable. Это значит, что в интерфейсе должны быть методы save(), load() и delete(): class Member implements Persistable {
private $username; private $location; private $homepage;
public function __construct( $username, $location, $homepage ) { $this->username = $username; $this->location = $location; $this->homepage = $homepage; }
public function getUsername() { return $this->username; }
public function getLocation() { return $this->location; }
public function getHomepage() { return $this->homepage; }
public function save() { echo "Saving member to database<br>"; }
public function load() { echo "Loading member from database<br>"; }
public function delete () { echo "Deleting member from database<br>"; }
} Наш класс Topic также будет имплементировать данный интерфейс, поэтому в нем тоже должны быть эти три метода: class Topic implements Persistable {
private $subject; private $author; private $createdTime;
public function __construct( $subject, $author ) { $this->subject = $subject; $this->author = $author; $this->createdTime = time(); }
public function showHeader() { $createdTimeString = date( 'l jS M Y h:i:s A', $this->createdTime ); $authorName = $this->author->getUsername(); echo "$this->subject (created on $createdTimeString by $authorName)<br>"; }
public function save() { echo "Saving topic to database<br>"; }
public function load() { echo "Loading topic from database<br>"; }
public function delete () { echo "Deleting topic from database<br>"; }
}
Мы также добавили несколько дополнительных методов, например, Member::getUsername() для получения имени пользователя, и Topic::showHeader() для отображения названия темы, имени автора и времени создания темы. Теперь можем создать объекты классов Member и Topic, а затем вызвать их методы getUsername() и showHeader(). Более того, зная, что эти классы имплементируют интерфейс Persistable, мы можем вызывать такие методы, как save(), load() или delete(): $aMember = new Member( "fred", "Chicago", "http://example.com/" ); echo $aMember->getUsername() . " lives in " . $aMember->getLocation() ."<br>"; $aMember->save();
$aTopic = new Topic( "Teddy Bears are Great", $aMember ); $aTopic->showHeader(); $aTopic->save(); На странице отобразится: fred lives in Chicago Saving member to database Teddy Bears are Great (created on Wednesday 25th May 2011 02:19:14 AM by fred) Saving topic to database Как видите, интерфейсы могут соединить классы, которые никак не относятся друг к другу, для определенных целей, например, записи в базу данных объектов класса. Не забудьте, что один класс может имплементировать несколько интерфейсов: class MyClass implements anInterface, anotherInterface { ... } На заметку: интерфейсы - это мощное свойство ООП, и о них можно еще много чего сказать. Узнать о них больше можно в PHP документации. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|