За последние 24 часа нас посетили 18520 программистов и 1706 роботов. Сейчас ищут 837 программистов ...

интерфейсы

Тема в разделе "Вопросы от блондинок", создана пользователем Padaboo, 21 июн 2010.

  1. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    объясните дураку зачем нужны интерфейсы если они не содержат в себе никаких реализаций ?
    т.е. для красоты что ли?или что бы самому не забыть какие методы надо реализовать?
    и какую смысловую нагрузку несет в себе допустим такая штука
    PHP:
    1. <?
    2. interface B{
    3.  
    4. }
    5. class A implements B{
    6.  
    7. }
    ну implements и implements что происходит то?
    зачем в интерфейсе это описывать, почему сразу не сделать?
     
  2. ideea

    ideea Активный пользователь

    С нами с:
    3 окт 2009
    Сообщения:
    60
    Симпатии:
    0
    Класс А должен обязательно иметь методы, описаные в интерфейсе B
     
  3. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    понятное дело, но если я в интерфейсе не забыл их обозначить то почему в классе должен забыть?
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
  5. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    [vs]
    PHP:
    1. <?php
    2.  interface a
    3.  {
    4.      public function a($var);
    5.  }
    6.  
    7.  interface b
    8.  {
    9.      public function b($var);
    10.  }
    11.  
    12.  class c implements a,b
    13.  {
    14.      public function a($var)
    15.      {
    16.            echo $var;
    17.      }
    18.      public function b($var)
    19.      {
    20.            echo $var;
    21.      }
    22.  }
    я бы понял все что написано в том топике, если бы интерфейс мог наследовать методы какого либо класса а потом прикручиваться к другому классу...вместе с унаследованными методами

    т.е. не вижу смысла , человек хочет создать объект у него, что с интерфейсом, что без если нужных методов не будет хватать - ошибка вывалится, тогда в чем разница, смотреть исходный класс, интерфейс или доку?
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Если не понимаешь, значит он нафиг не нужен.
     
  7. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Apple
    ХАахахахахахха :D
    ты понимаешь зачем он в php?)))
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Padaboo
    Возьми какой-нибудь фреймворк и все станет понятно.
    В одном классе может быть много методов. Вместе с кодом это может быть несколько сотен строк. Удобнее читать интерфейсы, чтобы узнать, какие методы реализует класс, правда? Конечно они должны быть прокомментированы.
    Далее. Допустим, в твоей системе есть метод, которому я передаю объект
    PHP:
    1. <?php
    2.      public function write($message)
    в этом методе есть обращения к объекту
    PHP:
    1.      $message->getText();
    без интерфейсов ты мог бы проверять наличие каждого нужного метода с помощью method_exists(); Или ты мог бы сделать класс Padaboo_Message, который мой объект должен был бы extends, но это несколько бы ограничило мои возможности (мой объект не мог бы быть наследником какого-нибудь моего Vs_Message).
    Вместо всего этого ты делаешь интерфейс и с помощью того же instanceof проверяешь, соответствует ли ему мой класс. А я сам забочусь о реализации нужных методов, при чем не имею никаких ограничений на наследование других классов или интерфейсов.
     
  9. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    это когда ты один пишешь в принципе можно и похерить, а когда команда, и разные куски пишут разные люди - ооочень помогает

    и когда структура классов очень вложена...
     
  10. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    понятно, получается удобно когда в команде, а то сижу и думаю, зачем мне интерфейс к своему же классу...
     
  11. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Ибо интерфейс ты пишешь, когда хорошо помнишь, что там должно быть. А вот еще один класс, реализующий этот интерфейс, можешь начать писать и через несколько лет. Без интерфейса придется лезть в первый класс, смотреть все его методы и разбираться - нужно ли их обязательно реализовывать в новом классе, ибо к ним обращение везде или же этот метод специфичтный для данной реализации и т.д. Интерфейс же четко описывает - что минимально должно быть в классе, что бы все работало. Если забыл что-то, получишь ошибку на старте использования класса, а вот без интерфейса ошибка "метод не найден" может вылезти много позже, особо если покрытие тестами не 100%.
     
  12. Эх. Уже писал же.
    ---
    Интерфейсы позволяют тебе гарантировать, что какой либо используемый объект реализует минимально необходимый набор функций.
    Суть в том, что пока ты пишешь программы сам, ты можешь договорится сам с собой о интерфейсе к чему либо, если же разрабочиков несколько,
    и тебе нужно контролировать код, который еще не написан, и будет написан не тобой.

    Хороший пример, реализация плагинов: ты описываешь интерфейс, в нашем случае, это будет IPlugin, например:

    PHP:
    1.  
    2. <?php
    3. interface IPlugin {
    4.     function register(array $config);
    5.     function unregister();
    6.     function process($data);
    7. }
    8.  
    И ты получаешь интерфейс плагина, и знаешь, что плагин будет реализовать эти три обязательные функции для работы.
    И можешь больше не думать о том, как обработать корректно ошибки, написанные автором очередного плагина.
    И можешь в исходном коде проверить, правильный ли это плагин, и от твоей ли он системы:

    PHP:
    1.  
    2. <?php
    3. class UserPlugin() {}
    4.  
    5. if (!in_array('IPlugin', class_implements('UserPlugin'))) { echo 'Неправильный формат плагина!'; }
    6.  
    На самом деле, интерфейсы становятся очень нужны при использовании многих паттернов категории Inverse of Control, того же Dependency Injection, но это уже совсем другая история, не для изучающих основы PHP =)
     
  13. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    самое забавное, что есть 100500 тем про интерфейсы, в том числе на этом форуме. Ну и в этой теме есть ссылка ну другую тему, где этот вопрос уже обсуждали. А в другой теме есть ссылка на более раннюю, третью тему и тд...

    как там контейнер поживает? Может просто расширить решение от sf мултитионами и проверкой интерфейсов?
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    instanceof
    не? =)
     
  15. я решил попробовать фемто расширить. )
    да, нужно ) Ты и в прошлый раз это писал, но я текст просто скопировал, не правил. Лучше instanceof, да.
     
  16. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Koc
    эта тема про интерфейсы самая полная получилась)
    флоппик
    мне похоже это еше предстоит, после знакомством с java полезу посмотрю ассемблер для полноты картины
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    xD
    да, там сплошные Dependency Injection и интерфейсы ))
     
  18. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    очень смешно, я java имел ввиду, а ассемблер, для полной картины вообще)
     
  19. Вот кстати изучая яву, - сразу понятно, зачем интерфейсы. Ибо, некоторые либы распостраняются в скомпиленном виде, и у тебя кроме интерфейсов - больше ниче и нет. Причем это касается и стандартных либ, насколько я знаю.
     
  20. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    интерфейсы - некоторое подобие документации в коде?
     
  22. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
  23. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
  24. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    ShamahN
    там тоже на английском)