Задать вопрос
@vrazbros

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

Привет

Столкнулся с проблемой как правильно реализовать семейство классов птицы, проблема с классом курицы, тк они летать не могут, но не реализовыватьже в каждом классе отдельно метод fly ? И

abstract class Bird
{
    abstract public function fly();
}

class Eagle extends Bird
{
    public function fly()
    {
        echo "I can fly";
    }
}

class Chicken extends Bird
{
    public function fly()
    {
        // What to do here ?
        die('I cant fly Error');
    }
}

$birds = [new Eagle(), new Chicken(), new Eagle()];

foreach ($birds as $bird) {
    echo $bird->fly();
}
  • Вопрос задан
  • 431 просмотр
Подписаться 1 Средний 4 комментария
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
@BorisKorobkov Куратор тега PHP
Web developer
Вариант 1.
Bird:
public function fly() { echo 'I can fly', PHP_EOL;  }

Chicken:
public function fly() { echo 'I can not fly', PHP_EOL;  }


Вариант 2.
Eagle, Duck:
public function fly() { echo 'I can fly', PHP_EOL;  }

Chicken:
public function fly() { echo 'I can not fly', PHP_EOL;  }


Вариант 3.
FlyBird:
public function fly() { echo 'I can fly', PHP_EOL;  }

Eagle, Duck extends FlyBird
Chicken:
public function fly() { echo 'I can not fly', PHP_EOL;  }


Вариант 4.
trait FlyBird:
public function fly() { echo 'I can fly', PHP_EOL;  }

Eagle, Duck use FlyBird
Chicken:
public function fly() { echo 'I can not fly', PHP_EOL;  }
Ответ написан
Комментировать
@red-barbarian
Посмотрите в сторону шаблона Стратегия.
Летание это довольно динамическое свойство. Даже может меняться а процессе жизни объекта. Поэтому это свойство чаще всего полезнее выносить за объект. И присваивать полю "летание" некую реализацию из вне.
Например
Ласточка летает одним методом. Птенцы и курицы другим. И т. д.
Наследование довольно жесткая связь. Ее стоит избегать. Если это возможно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽