- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Кто объяснит, зачем нужны интерфейсы, если все методы все равно описываются в классах?
autocalc, если зарегистрировать интерфейс и не зарегистрировать класса, который наследует этот интерфейс, будет ошибка. Т.е., по сути это контрольный шаблон, который задает, что вот обязательно должен быть класс, который меня наследует и содержит в себе такие же методы. По сути, полезно, если над проектом работает не один человек.
Я на своем опыте(очень-очень небольшом) понял, что есть такие вещи, с которыми пока лбом не столкнешся - не поймешь, что к чему:) Я ООП вообще не использую, онли процедурный подход, он мне ближе. Но все же бывают ситуации, когда использование ООП логичней.
ИМХО: ООП больше ориентировано на коллективную работу(проще работать). Те же фабрики шаблонов и т.д.
Милованов Ю.С, методы можно переписать, процедуры - только целиком. Классы можно наследовать, процедуры только вызывать, и т.д..
Кто объяснит, зачем нужны интерфейсы, если все методы все равно описываются в классах?
Выделил главное в вопросе. Простой и понятный пример: пишем класс кеширования, но заранее не знаем, где именно будем держать кеш (база/файлы/память и т.д.). Создается интерфейс и по нему пишется основной класс. А драйвера хранилищ должны наследоваться от интерфейса, иначе не будут приняты основным классом. В итоге, код кеширования написан еще до того, как создан хоть одно хранилище.
Выделил главное в вопросе. Простой и понятный пример: пишем класс кеширования, но заранее не знаем, где именно будем держать кеш (база/файлы/память и т.д.). Создается интерфейс и по нему пишется основной класс. А драйвера хранилищ должны наследоваться от интерфейса, иначе не будут приняты основным классом. В итоге, код кеширования написан еще до того, как создан хоть одно хранилище.
В Вашем примере может лучше основной класс сделать абстрактным , и драйвера наследовать от него.
Иначе если драйвера напрямую будут реализовывать интерфейс то в них прийдется реализовывть все методы, объявленные в интерфейсе.
Ну а если уж сильно хочется интерфейс, то можно реализовать его не полностью основным классом (тогда он будет абстрактным), а драйвера опять таки будут его наследовать.
имхо в PHP, как в нетипизированном языке смысла интерфейсов нет.
А вообще, это обсуждалось в комментариях на хабре.. Почитайте, поймете сами, нужны ли вам интерфейсы: http://habrahabr.ru/post/35366 .
имхо в PHP, как в нетипизированном языке смысла интерфейсов нет.
Как раз интерфейсы и позволяют добавить относительную строгую типизацию в код.
Например:
public function method(InterfaceOne $var1, InterfaceTwo $var2) {...}Без интерфейсов сложно писать код, следуя известным паттернам проектирования.