Интерфейсы PHP: как их можно использовать на практике? - PullRequest
11 голосов
/ 11 сентября 2011

Я начну с того, что знаю, как работают интерфейсы PHP и как их использовать.

Мой вопрос скорее;как они становятся полезными в реальных приложениях?

Я пишу PHP уже более 3 лет и никогда не чувствовал необходимости для интерфейса.Я пишу интерфейсы больше для хорошей практики, чем для конкретной цели.

Ответы [ 3 ]

12 голосов
/ 11 сентября 2011

Я приведу пример, где я использовал интерфейсы в своем собственном реальном опыте.

Интерфейсы чрезвычайно полезны, когда вам нужно определить что-то вроде архитектуры плагина. Предположим, что ваше приложение принимает плагины аутентификации, позволяющие разработчикам конечных пользователей интегрироваться со своими собственными внутренними инфраструктурами аутентификации (LDAP, Shibboleth, некоторой настраиваемой базой данных аутентификации и т. Д.). Чтобы плагин был совместимым, он должен реализовывать следующие методы:

validate_user()
start_user_session()
logout_user()
get_user_details()

Если определено в интерфейсе, класс затем реализует интерфейс, обеспечивая наличие необходимых методов для совместимости с архитектурой плагина.

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

2 голосов
/ 11 сентября 2011

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

К сожалению, PHP фактически не проверяет, являются ли какие-либо вызываемые методы или свойства, которые вы вызываете для этого параметра,на самом деле в этом интерфейсе, так что вы можете случайно использовать свойство объекта, которое недоступно в интерфейсе, вызывая потенциальные ошибки при передаче объекта другого типа.

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

Тем не менее, они удобны для этой цели и в PHP, и, возможно, эти проверки станут более строгими в будущих версиях, поэтому они станут менее подверженными ошибкам.

0 голосов
/ 12 сентября 2011

Ознакомьтесь со стандартной библиотекой PHP (SPL) http://php.net/manual/en/book.spl.php

Countable и RecursiveIterator могут дать вам подсказку.

...