На наследовании свет клином не сошелся и вообще не стоит им злоупотреблять. Попробуйте мыслить интерфейсами. Класс птицы реализовует базовые функции семейства: к-во ног, наличие головы, глаз и т.д. Если птица у меет плавать, значит она реализовует интерфейс "плавающая" с методом "плыть(азимут, скорость, время)" Если пернатая поет, то у класса есть реализация интерфейса "голосистая" с методом song(имя MP3-файла) Чтобы проверить насколько хороша идея бросить птичку в реку, надо проверить наличие интерфейса if($страус instanceof водоплавающий){ $river->push($straus)} Если птички плавают/поют одинаковым стилем, то одинаковые методы с реализацией интерфейсов можно вынесни в трейты. Простите, если нафлудил
А как вам такая идея PHP: interface Bird { public function Fly(); public function Run(); public function Swim(); public function Peck(); } class Parrot implements Bird { public function Fly() { return true; } public function Run() { return false; } public function Swim() { return false; } public function Peck() { return true; } }
@[vs] отличная можно ещё абстрактный класс туда засунуть --- Добавлено --- Можно над трейтами ещё извращаться PHP: trait Flyable { function fly() {} } class Parrot implements Bird { use Flyable; } --- Добавлено --- А чего? И классы и трейты, и абстрактные классы вместе с интерфейсами засунуть в одно место. Кто пример напишет а то чёт лень?
Ну как советует "относительно классическая литература" Тут подходит strategy patter. Кстати пример прям один в один из книги Head First Design Patterns Там прям в самом начале рассказывается про уток https://github.com/bethrobson/Head-...master/src/headfirst/designpatterns/strategy1
Знакомая какая история с этими птицами. Никак не могу вспомнить где я это уже слышал. Зачем у тебя вообще наследование тут, у тебя же ничего не наследуется совсем. Код (Text): <?php class Bird { static function fly(){ return 'i can fly'; } } class Eagle extends Bird { } class Chicken extends Bird { static function fly(){ return 'sorry man, i cannot fly'; } } $birds = [Eagle::fly(), Chicken::fly(), Eagle::fly()]; var_dump($birds);