За последние 24 часа нас посетили 17429 программистов и 1601 робот. Сейчас ищут 926 программистов ...

Интерфейсы

Тема в разделе "PHP для новичков", создана пользователем rar, 28 окт 2009.

  1. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Почему интерпретатор PHP ругается, и говорит, что метод boo() должен быть опущен? Или его надо делать public! Тогда какой толк от таких интерфейсов? Я же хочу показать через интерфейс все функции используемые в классе.

    PHP:
    1. <?
    2.  
    3. interface IA {
    4.     public function foo();
    5.     private function boo();
    6. }
    7.  
    8. class A implements IA {
    9.     public function foo() {
    10.        //......
    11.     }
    12.  
    13.     private function boo() {
    14.        // .....
    15.     }
    16. }
    17.  
    18. ?>
    В абстрактных классах тоже самое: требует чтобы метод был с модификатором доступа public или был опущен.

    Не могу понять, как по-человечески использовать абстрактные классы и интерфейсы.
     
  2. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Все методы в интерфейсах должны быть public иначе какой в них смысл?
    Интерфейс определяет, что должен уметь класс его реализующий. Что мы можем сделать с объектом такого класса.
    Если же мы запишем в интерфейс private метод, то получим метод, к которому не сможем получить доступ. Таким образом мы заставим программиста реализовывать лишний метод, который нигде не используется.
     
  4. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Идея была такая. Есть класс, в нем куча методов. В интерфейсе прописать названия всех этих методов, чтобы другой человек не рылся в коде для установке того, сколько методов в классе и какие они. И я хотел в интерфейсе описать, собственно, интерфейс класса. Но по логике у меня некоторые методы идут с модификатором private. А оказывается в интерфейсе или в абстрактном классе методы с private не котируются. Если я его оставлю private, не пропишу в интерфейсе, тогда получается, толку не много, опять интерфейс не даст полного представления о классе. Есть какие-нибудь выходы?
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Зачем другому человеку знать какие методы есть у класса?
    1. Для того чтобы создавать объекты этого класса и с ними работать? Тогда ему private методы не нужны и интерфейс здесь хорошо подойдет.
    2. Для того чтобы исправлять/расширять класс? Тогда:
    2.1. Использовать какой либо редактор, позволяющий сворачивать блоки. Свернуть все методы и вот оно, то что требовалось.
    2.2. Cуществуют готовые программы, которые выдернут объявление метода из класса.
     
  6. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    С интерфейсами можно сделать так:
    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. }
    23.  
     
  7. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    определять не публичные методы в интерфейсе не имеет смысла.
    определять приватные методы в абстрактном классе не имеет смысла.


    для этого используется документация а не парадигмы ООП