ФорумПрограммированиеPHP для идиотовPHP и ООП → Интерфейсы

Интерфейсы

  • CyberSport

    Сообщения: 245 Репутация: N Группа: Кто попало

    Spritz 19 декабря 2008 г. 12:57

    Хотелось бы пополной использовать ООП,может кто показать примеры где реально удобно использовать интерфейсы?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 19 декабря 2008 г. 13:28, спустя 31 минуту 13 секунд

    очень сложный вопрос)

    обычно приводят в пример - геометрические фигуры. а вообще интерфейсы для меня - как условия, который ОБЯЗАН выолнять класс в реализации
    Сапожник без сапог
  • CyberSport

    Сообщения: 245 Репутация: N Группа: Кто попало

    Spritz 19 декабря 2008 г. 13:34, спустя 6 минут 38 секунд


    очень сложный вопрос)

    обычно приводят в пример - геометрические фигуры. а вообще интерфейсы для меня - как условия, который ОБЯЗАН выолнять класс в реализации


    я тоже так понимаю,но на практике применять не приходилось
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 19 декабря 2008 г. 15:10, спустя 1 час 35 минут 17 секунд



    очень сложный вопрос)

    обычно приводят в пример - геометрические фигуры. а вообще интерфейсы для меня - как условия, который ОБЯЗАН выолнять класс в реализации


    я тоже так понимаю,но на практике применять не приходилось
    боюсь что и не придется. это полезно в оочень крупных проектах на ооп, а я боюсь что такой проект если лаже написать, придется переписать ибо все будет втыкаться неимоверно. да и такие вещи нужны больше для работы с вещами, с которыми уже есть средства работы :) INumerable, ISocket и тп )
    Сапожник без сапог
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 19 декабря 2008 г. 15:35, спустя 25 минут 13 секунд

    Реально вот интерфейсы юзать не пришлось, хватает абстрактных классов с головой.
  • CyberSport

    Сообщения: 245 Репутация: N Группа: Кто попало

    Spritz 19 декабря 2008 г. 15:59, спустя 24 минуты 6 секунд


    Реально вот интерфейсы юзать не пришлось, хватает абстрактных классов с головой.



    Можно реальный пример где абстрактный класс удобен??
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 19 декабря 2008 г. 16:01, спустя 1 минуту 45 секунд

    http://s-a-p.in/interactive/theme/polymorphism-for-beginners
    Только там он упрощенный, но вообще в такой ситуации очень даже удобно.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 19 декабря 2008 г. 16:01, спустя 27 секунд



    Реально вот интерфейсы юзать не пришлось, хватает абстрактных классов с головой.



    Можно реальный пример где абстрактный класс удобен??
    например класс работы с бд, есть функции getall, insert, select, которые используют функции реализации конечного класс например мускуля $this->fetch, $this->query и тп :)
    нупример работы с IO - сокеты, процессы, файлы и тп например кеширование :) например шаблонизаторы .. много чего например)
    Сапожник без сапог
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 8:12, спустя 16 часов 10 минут 51 секунду

  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 20 декабря 2008 г. 8:22, спустя 9 минут 54 секунды

    готичный пример

    <?php
    /******************************************************************************
    * Интерфейс "смертный"
    */
    interface Killable
    {
    public function kill();
    }

    /******************************************************************************
    * Класс-убийца
    */
    class Killer
    {
    private $victims = array();

    /**
    * Добавляет жертву в список смертников
    */
    public function add(Killable $v)
    {
    $this->victims[] = $v;
    }

    /**
    * Убивает всех нафиг
    */
    public function killAll()
    {
    foreach ($this->victims as & $v) {
    $v->kill();
    }
    }
    }

    /******************************************************************************
    * Киса
    */
    class Cat
    implements Killable
    {
    public function kill()
    {
    echo 'Мяу<br>';
    }
    }

    /******************************************************************************
    * Собачко
    */
    class Dog
    implements Killable
    {
    public function kill()
    {
    echo 'Гав<br>';
    }
    }

    /******************************************************************************
    * Хуман
    */
    class Human
    implements Killable
    {
    public function kill()
    {
    echo 'АААА!!!!<br>';
    }
    }

    /******************************************************************************
    * дункан маклауд из клана маклаудов
    */
    class DuncanMacLeod extends Human
    {
    public function kill()
    {
    throw new Exception('Я ж бессмертный, ёпте!');
    }
    }

    // тест
    $klr = new Killer();
    $klr->add(new Cat());
    $klr->add(new Dog());
    $klr->add(new Human());
    $klr->add(new DuncanMacLeod());
    try {
    $klr->killAll();
    } catch (Exception $e) {
    echo $e->getMessage();
    }
    ?>
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 8:44, спустя 22 минуты 11 секунд

        public function killAll() 
    {
    foreach ($this->victims as $v) {
    $v->kill();
    }
    }

    тут проблемы с выделением памяти надо перед $v амперсанд ставить
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 20 декабря 2008 г. 8:50, спустя 5 минут 54 секунды

    тут проблемы с выделением памяти надо перед $v амперсанд ставить

    ok

Пожалуйста, авторизуйтесь, чтобы написать комментарий!