<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

Также почти к каждому уроку идут упражнения для закрепления материала.

Просмотрев курс и выполнив упражнения, Вы сможете без проблем создавать функциональные движки для самых различных сайтов.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Интерфейсы в PHP

Интерфейсы в PHP

В этой статье мы продолжим заниматься возможностями по ООП, которые нам предоставляет PHP. И в этот раз разберём тему интерфейсов в PHP. Если кто-то изучал C++, то те знают, что там существует множественное наследование. То есть, когда один класс наследует сразу несколько других классов. На мой взгляд, это создаёт жуткую путаницу. Поэтому было принято решение: в PHP отказаться от множественного наследования. Однако, компенсировать это как-то было надо, и тогда придумали интерфейсы. Кстати, те, кто знает Java, поймут, о чём идёт речь, так как там тоже нет множественного наследования, но имеются интерфейсы. А о том, как использовать интерфейсы в PHP я расскажу в этой статье.

Интерфейс - это набор методов без реализации. То есть в интерфейс входят методы с именем и входными параметрами. Больше ничего нет. Любой класс, который реализует (обратите внимание, что не наследует, а реализует) данный интерфейс, обязан реализовать каждый метод. Чтобы стало ещё понятнее, хочется привести аналог из жизни. Каждый человек выполняет определённые функции. Например, учится, работает, убирает квартиру, готовит еду и занимается другими очевидными вещами. Можете считать, что интерфейс - это область занятий, например, учёба, работа, уборка квартиры, готовка еды. А методы интерфейса - это уже конкретная задача в данной области. Например, в уборке квартиры могут быть такие методы: мойка посуды, мойка пола, вынос мусора и другие. В готовке еды могут быть такие методы: готовка борща, готовка мяса, чистка картошки и прочее. Надеюсь, мысль Вы уловили.

То есть интерфейсы - это возможность определить род задач для объекта, которые он должен реализовывать.

Давайте разберём простой пример, создав следующий интерфейс (в файле "fileinterface.php"):

<?php
  interface FileInterface {
    public function readFromFile($path);
    public function writeToFile($path, $some);
  }
?>

То есть данный интерфейс просто описывает работу с файлом. Соответственно, те объекты, которые должны читать из файла и записывать различные данные, обязаны реализовать интерфейс "FileInterface".

Создадим ещё один интерфейс (в файле "client.php"):

<?php
  interface Client {
    public function buy ($id);
    public function repayment($id);
  }
?>

Данный интерфейс реализует функцию клиента, то есть можно что-то купить (задаётся $id), а также что-то возвратить обратно (тоже задаётся по $id).

И, наконец, класс, который реализует эти интерфейсы, то есть класс у которого области задач две - быть клиентом и работать с файлом (файл "shop.php"):

<?php
  require_once "fileinterface.php";
  require_once "client.php";
  class Shop implements FileInterface, Client{
    public function readFromFile($path) {
      echo "Считываем из файла и возвращаем строку<br />";
    }
    public function writeToFile($path, $some) {
      echo "Записываем в файл данные $some<br />";
    }
    public function buy($id) {
      echo "Спасибо за покупку<br />";
      $this->writeToFile("data.db", "Был куплен товар $id");
    }
    public function repayment($id) {
      $this->readFromFile("data.db");
      //Тут, допустим, проверка того, была ли на самом деле покупка товара $id
      $this->writeToFile("data.db", "Был сделан возврат товара $id");
    }
  }
?>

Думаю, тут всё прозрачно, но просто хочется добавить, что реализация должна быть для каждого метода каждого интерфейса. Она может быть пустой, но тем не менее. Про это не забывайте.

И, наконец, простой пример, который использует класс Shop:

<?php
  require_once "shop.php";
  $shop = new Shop();
  $shop->buy(5);
  $shop->repayment(5);
?>

Разумеется, другие классы, реализующие данные интерфейсы могут совсем по-другому обрабатывать их методы.

Вот и всё, что хотелось сказать по интерфейсам в PHP.

До следующей статьи!

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (12):

lev_100rus lev_100rus 28.07.2012 18:16:07

Михаил, у вас в системе комментариев по моему ошибка! Если я жму кнопку "Ответить", То ничего не происходит! Также не работает кнопка "Получать уведомление на E-mail об ответах на Ваш комментарий" Хотя в прочем она и не нужна, потому что ответы приходят и так, автоматически!

Ответить

lev_100rus lev_100rus 28.07.2012 18:17:23

Также не работает кнопка "Редактировать"! Не знаю, может быть это только у меня так! Браузер IE(Internet Explorer) 8

Ответить

ArturPanteleev ArturPanteleev 28.08.2012 13:10:34

А возможно ли однавременное наследование какого-лтбо класса+реализация интерфейсов? То есть например class women extends people implements Uborka, Gotovka и еще вопрос, что будет если в двух интерфейсах определенны одинаково называющиеся методы?

Ответить

Admin Admin 28.08.2012 19:31:50

Одновременное наследование классов и реализация интерфейса возможна, именно в таком порядке. А вот два интерфейса не могут содержать одинаковые методы.

Ответить

mischa.samolkaev mischa.samolkaev 23.12.2012 11:08:49

В чем существенная разница между абстрактным классом и интерфейсом

Ответить

Admin Admin 23.12.2012 11:12:10

Абстрактный класс - это самый обычный класс, в котором есть хотя бы 1 абстрактный метод. Помимо него могут быть и свойства, и методы с реализацией. А интерфейс не имеет никаких свойств, и все его методы не имеют реализацию.

Ответить

WoSpi WoSpi 03.05.2013 15:17:50

А зачем это нужно? Можете привести пример, где это действительно необходимо? Почему нельзя обойтись без интерфейса и просто задать методы в классах? какая разница?

Ответить

Admin Admin 03.05.2013 17:29:42

Почитайте про паттерны проектирования, там написаны и примеры, и многое другое, где всё это используется. В двух словах о примере не рассказать, но используется это для создания понятной архитектуры программы в целом.

Ответить

kumakbtu kumakbtu 04.05.2013 15:38:09

В php есть много вложенных функции. А есть ли в php вложенные классы, интерфейсы, как в Java? В php просто много функции. Было бы луче если их сгруппировать по интерфейсам или классам, я так думаю.

Ответить

Admin Admin 04.05.2013 21:21:24

Есть, например, mysqli.

Ответить

screnginer screnginer 12.06.2014 11:25:35

Спасибо за статью!

Ответить

Great Great 12.05.2015 11:15:13

Полезная статья. Спасибо

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.