объясните дураку зачем нужны интерфейсы если они не содержат в себе никаких реализаций ? т.е. для красоты что ли?или что бы самому не забыть какие методы надо реализовать? и какую смысловую нагрузку несет в себе допустим такая штука PHP: <? interface B{ } class A implements B{ } ну implements и implements что происходит то? зачем в интерфейсе это описывать, почему сразу не сделать?
[vs] PHP: <?php interface a { public function a($var); } interface b { public function b($var); } class c implements a,b { public function a($var) { echo $var; } public function b($var) { echo $var; } } я бы понял все что написано в том топике, если бы интерфейс мог наследовать методы какого либо класса а потом прикручиваться к другому классу...вместе с унаследованными методами т.е. не вижу смысла , человек хочет создать объект у него, что с интерфейсом, что без если нужных методов не будет хватать - ошибка вывалится, тогда в чем разница, смотреть исходный класс, интерфейс или доку?
Padaboo Возьми какой-нибудь фреймворк и все станет понятно. В одном классе может быть много методов. Вместе с кодом это может быть несколько сотен строк. Удобнее читать интерфейсы, чтобы узнать, какие методы реализует класс, правда? Конечно они должны быть прокомментированы. Далее. Допустим, в твоей системе есть метод, которому я передаю объект PHP: <?php public function write($message) в этом методе есть обращения к объекту PHP: $message->getText(); без интерфейсов ты мог бы проверять наличие каждого нужного метода с помощью method_exists(); Или ты мог бы сделать класс Padaboo_Message, который мой объект должен был бы extends, но это несколько бы ограничило мои возможности (мой объект не мог бы быть наследником какого-нибудь моего Vs_Message). Вместо всего этого ты делаешь интерфейс и с помощью того же instanceof проверяешь, соответствует ли ему мой класс. А я сам забочусь о реализации нужных методов, при чем не имею никаких ограничений на наследование других классов или интерфейсов.
это когда ты один пишешь в принципе можно и похерить, а когда команда, и разные куски пишут разные люди - ооочень помогает и когда структура классов очень вложена...
понятно, получается удобно когда в команде, а то сижу и думаю, зачем мне интерфейс к своему же классу...
Ибо интерфейс ты пишешь, когда хорошо помнишь, что там должно быть. А вот еще один класс, реализующий этот интерфейс, можешь начать писать и через несколько лет. Без интерфейса придется лезть в первый класс, смотреть все его методы и разбираться - нужно ли их обязательно реализовывать в новом классе, ибо к ним обращение везде или же этот метод специфичтный для данной реализации и т.д. Интерфейс же четко описывает - что минимально должно быть в классе, что бы все работало. Если забыл что-то, получишь ошибку на старте использования класса, а вот без интерфейса ошибка "метод не найден" может вылезти много позже, особо если покрытие тестами не 100%.
Эх. Уже писал же. --- Интерфейсы позволяют тебе гарантировать, что какой либо используемый объект реализует минимально необходимый набор функций. Суть в том, что пока ты пишешь программы сам, ты можешь договорится сам с собой о интерфейсе к чему либо, если же разрабочиков несколько, и тебе нужно контролировать код, который еще не написан, и будет написан не тобой. Хороший пример, реализация плагинов: ты описываешь интерфейс, в нашем случае, это будет IPlugin, например: PHP: <?php interface IPlugin { function register(array $config); function unregister(); function process($data); } И ты получаешь интерфейс плагина, и знаешь, что плагин будет реализовать эти три обязательные функции для работы. И можешь больше не думать о том, как обработать корректно ошибки, написанные автором очередного плагина. И можешь в исходном коде проверить, правильный ли это плагин, и от твоей ли он системы: PHP: <?php class UserPlugin() {} if (!in_array('IPlugin', class_implements('UserPlugin'))) { echo 'Неправильный формат плагина!'; } На самом деле, интерфейсы становятся очень нужны при использовании многих паттернов категории Inverse of Control, того же Dependency Injection, но это уже совсем другая история, не для изучающих основы PHP =)
самое забавное, что есть 100500 тем про интерфейсы, в том числе на этом форуме. Ну и в этой теме есть ссылка ну другую тему, где этот вопрос уже обсуждали. А в другой теме есть ссылка на более раннюю, третью тему и тд... как там контейнер поживает? Может просто расширить решение от sf мултитионами и проверкой интерфейсов?
я решил попробовать фемто расширить. ) да, нужно ) Ты и в прошлый раз это писал, но я текст просто скопировал, не правил. Лучше instanceof, да.
Koc эта тема про интерфейсы самая полная получилась) флоппик мне похоже это еше предстоит, после знакомством с java полезу посмотрю ассемблер для полноты картины
Вот кстати изучая яву, - сразу понятно, зачем интерфейсы. Ибо, некоторые либы распостраняются в скомпиленном виде, и у тебя кроме интерфейсов - больше ниче и нет. Причем это касается и стандартных либ, насколько я знаю.
я пока еше теоретик, дочитал до половины "Полный справочник по java SE6" , потом буду читать "Философия java" потом попробую написать что нибудь)вот что подстегивает http://www.jmonkeyengine.com/ во, шик: http://www.youtube.com/watch?v=KU_QAK2Q ... r_embedded
с моим новым провайдером меня не пускает на http://ru.php.net/ на http://ru2.php.net пускает) бредок какой-то