Вызов методов интерфейса PHP - PullRequest
0 голосов
/ 03 декабря 2011

Хорошо, я пытаюсь начать действительно изучать стиль ООП в PHP.Я объявил и интерфейсы и классы и имею классы, реализующие интерфейсы.Мне было интересно, однако, нельзя ли просто загрузить файлы интерфейса в файлы сценариев PHP и вызвать методы из интерфейса вместо загрузки файлов реализации класса?Если так, как это будет сделано, потому что я не могу найти ответ на этот вопрос.Спасибо!

Ответы [ 3 ]

6 голосов
/ 03 декабря 2011

Интерфейсы могут не иметь реализации, поэтому вы не можете этого сделать. Их цель состоит в том, чтобы оговорить «контракты» (в том смысле, что «классы, которые реализуют этот интерфейс, обещают предоставить открытые методы X Y и Z»), которым должны соответствовать классы (которые реализуют интерфейсы).

Это действительно очень простые вещи ООП, и они не применимы только к PHP. Я бы предложил изучить еще несколько теорий ООП, прежде чем пытаться продвигаться дальше.

2 голосов
/ 03 декабря 2011

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

0 голосов
/ 15 марта 2015

Предоставляется ИНТЕРФЕЙС, чтобы вы могли описать набор функций и затем скрыть окончательную реализацию этих функций в классе реализации. Это позволяет вам изменить ОСУЩЕСТВЛЕНИЕ этих функций без изменения способа их использования.

Например: у меня есть база данных. Я хочу написать класс, который обращается к данным в моей базе данных. Я определяю интерфейс следующим образом:

interface Database {
function listOrders();
function addOrder();
function removeOrder();
...
}

Тогда, скажем, мы начинаем использовать базу данных MySQL. Итак, мы пишем класс для доступа к базе данных MySQL:

class MySqlDatabase implements Database {
function listOrders() {...
}

мы пишем эти методы по мере необходимости, чтобы добраться до таблиц базы данных MySQL. Затем вы можете написать свой контроллер для использования интерфейса следующим образом:

$database = new MySqlDatabase();
foreach ($database->listOrders() as $order) {

Тогда, скажем, мы решили перейти на базу данных Oracle. Мы могли бы написать другой класс для доступа к базе данных Oracle как таковой:

class OracleDatabase implements Database {
public function listOrders() {...
}

Затем - чтобы переключить наше приложение на использование базы данных Oracle вместо базы данных MySQL, нам нужно всего лишь изменить ОДНУ СТРОКУ кода:

$database = new OracleDatabase();

все остальные строки кода, такие как:

foreach ($database->listOrders() as $order) {

останется без изменений. Дело в том, что ИНТЕРФЕЙС описывает методы, которые нам нужны для доступа к нашей базе данных. Это НЕ описывает, каким образом мы этого добиваемся. Вот что делает класс IMPLEMENTing. Мы можем РЕАЛИЗОВАТЬ этот интерфейс столько раз, сколько нам нужно, так много разных способов, как нам нужно. Затем мы можем переключаться между реализациями интерфейса без ущерба для нашего кода, потому что интерфейс определяет, как мы будем его использовать, независимо от того, как он на самом деле работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...