Интерфейсы PHP

autocalc
На сайте с 11.05.2011
Offline
52
1024

Кто объяснит, зачем нужны интерфейсы, если все методы все равно описываются в классах?

O
На сайте с 29.05.2008
Offline
195
#1

autocalc, если зарегистрировать интерфейс и не зарегистрировать класса, который наследует этот интерфейс, будет ошибка. Т.е., по сути это контрольный шаблон, который задает, что вот обязательно должен быть класс, который меня наследует и содержит в себе такие же методы. По сути, полезно, если над проектом работает не один человек.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#2

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

ИМХО: ООП больше ориентировано на коллективную работу(проще работать). Те же фабрики шаблонов и т.д.

Подпись))
O
На сайте с 29.05.2008
Offline
195
#3

Милованов Ю.С, методы можно переписать, процедуры - только целиком. Классы можно наследовать, процедуры только вызывать, и т.д..

A
На сайте с 29.12.2007
Offline
68
#4
autocalc:
Кто объяснит, зачем нужны интерфейсы, если все методы все равно описываются в классах?

Выделил главное в вопросе. Простой и понятный пример: пишем класс кеширования, но заранее не знаем, где именно будем держать кеш (база/файлы/память и т.д.). Создается интерфейс и по нему пишется основной класс. А драйвера хранилищ должны наследоваться от интерфейса, иначе не будут приняты основным классом. В итоге, код кеширования написан еще до того, как создан хоть одно хранилище.

vadoru
На сайте с 06.01.2009
Offline
38
#5
aktuba:
Выделил главное в вопросе. Простой и понятный пример: пишем класс кеширования, но заранее не знаем, где именно будем держать кеш (база/файлы/память и т.д.). Создается интерфейс и по нему пишется основной класс. А драйвера хранилищ должны наследоваться от интерфейса, иначе не будут приняты основным классом. В итоге, код кеширования написан еще до того, как создан хоть одно хранилище.

В Вашем примере может лучше основной класс сделать абстрактным , и драйвера наследовать от него.

Иначе если драйвера напрямую будут реализовывать интерфейс то в них прийдется реализовывть все методы, объявленные в интерфейсе.

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

имхо в PHP, как в нетипизированном языке смысла интерфейсов нет.

Учебный центр design-class.com.ua (http://design-class.com.ua)
[Удален]
#6

А вообще, это обсуждалось в комментариях на хабре.. Почитайте, поймете сами, нужны ли вам интерфейсы: http://habrahabr.ru/post/35366 .

T
На сайте с 01.10.2004
Offline
73
#7
vadoru:
имхо в PHP, как в нетипизированном языке смысла интерфейсов нет.

Как раз интерфейсы и позволяют добавить относительную строгую типизацию в код.

Например:

public function method(InterfaceOne $var1, InterfaceTwo $var2) {...} 

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий