За последние 24 часа нас посетили 22295 программистов и 1165 роботов. Сейчас ищут 690 программистов ...

Как правильно создать иерархию классов птицы ?

Тема в разделе "PHP для профи", создана пользователем asker234, 31 мар 2018.

  1. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    @igordata Ну это весело
    --- Добавлено ---
    Наверное
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    прям апатия по учебнику
     
  3. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    @igordata Ты заебал с апатией, второй раз за сегодня
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    зачем ты злой такой?
     
  5. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Я не знаю
    --- Добавлено ---
    Просто все плохо
    --- Добавлено ---
    Всё как обычно
     
    #30 Васяня, 6 апр 2018
    Последнее редактирование: 6 апр 2018
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    @Ganzal
    Ганзал, здесь твой сын!
     
  7. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    @igordata Не особо понял о чём ты
     
  8. AndryG

    AndryG Новичок

    С нами с:
    23 ноя 2017
    Сообщения:
    5
    Симпатии:
    2
    На наследовании свет клином не сошелся и вообще не стоит им злоупотреблять.
    Попробуйте мыслить интерфейсами.

    Класс птицы реализовует базовые функции семейства: к-во ног, наличие головы, глаз и т.д.
    Если птица у меет плавать, значит она реализовует интерфейс "плавающая" с методом "плыть(азимут, скорость, время)"
    Если пернатая поет, то у класса есть реализация интерфейса "голосистая" с методом song(имя MP3-файла)

    Чтобы проверить насколько хороша идея бросить птичку в реку, надо проверить наличие интерфейса if($страус instanceof водоплавающий){ $river->push($straus)}
    Если птички плавают/поют одинаковым стилем, то одинаковые методы с реализацией интерфейсов можно вынесни в трейты.

    Простите, если нафлудил :)
     
    Васяня нравится это.
  9. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Жестоко.
     
  10. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    А как вам такая идея
    PHP:
    1. interface Bird {
    2.    
    3.     public function Fly();
    4.    
    5.     public function Run();
    6.    
    7.     public function Swim();
    8.    
    9.     public function Peck();
    10.    
    11. }
    12.  
    13. class Parrot implements Bird {
    14.    
    15.     public function Fly() {
    16.         return true;
    17.     }
    18.    
    19.     public function Run() {
    20.         return false;
    21.     }
    22.    
    23.     public function Swim() {
    24.         return false;
    25.     }
    26.    
    27.     public function Peck() {
    28.         return true;
    29.     }
    30.    
    31. }
     
    glorsh66 нравится это.
  11. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    @[vs] отличная можно ещё абстрактный класс туда засунуть
    --- Добавлено ---
    Можно над трейтами ещё извращаться
    PHP:
    1. trait Flyable {
    2.    function fly() {}
    3. }
    4.  
    5. class Parrot implements Bird {
    6.     use Flyable;
    7. }
    --- Добавлено ---
    А чего? И классы и трейты, и абстрактные классы вместе с интерфейсами засунуть в одно место. Кто пример напишет а то чёт лень?
     
  12. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Я это еще на первой странице предложил :) они как раз созданы для таких случаев.
     
    Васяня нравится это.
  13. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    @[vs] действительно
     
  14. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Вы ахуенно долго приходили к ответу во втором посте, господа.
     
  15. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Чуваки, фокусируйтесь на задаче, а не на выпячивании собственной крутизны :)
     
    TeslaFeo нравится это.
  16. glorsh66

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

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    Ну как советует "относительно классическая литература"
    Тут подходит strategy patter.
    Кстати пример прям один в один из книги Head First Design Patterns
    Там прям в самом начале рассказывается про уток

    https://github.com/bethrobson/Head-...master/src/headfirst/designpatterns/strategy1
     
  17. johovich

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

    С нами с:
    24 авг 2016
    Сообщения:
    146
    Симпатии:
    17
    Знакомая какая история с этими птицами. Никак не могу вспомнить где я это уже слышал.
    Зачем у тебя вообще наследование тут, у тебя же ничего не наследуется совсем.
    Код (Text):
    1.  
    2. <?php
    3. class Bird
    4. {
    5.    static function fly(){
    6.        return 'i can fly';
    7.        
    8.    }
    9. }
    10.  
    11. class Eagle extends Bird
    12. {
    13.  
    14. }
    15.  
    16. class Chicken extends Bird
    17. {
    18.     static function fly(){
    19.         return 'sorry man, i cannot fly';
    20.     }
    21. }
    22.  
    23. $birds = [Eagle::fly(), Chicken::fly(), Eagle::fly()];
    24.  
    25. var_dump($birds);