Уровни наследования в PHP?

234
15 августа 2017, 16:06

Множественного наследования в PHP нет (ну в классическом понимании), множественное это когда унаследуются от несколькоих классов сразу. Сегодня встретил конструкцию типа:

$this->parent->parent->nameMethod()

Очевидно класс в котром я нахожусь чей-то наследник, а тот ещё чек-то наследник в свою очередь.

1) Ограничен ли уровень такого наследования в глубину?

2) Хороший ли это тон, правильная архитектура проекта допускает такое, или лучше ограничиться всегда одним уровнем?

Answer 1

1) В данном случае идет обращение к переменной экземпляра по имени $parent, а не к родительскому объекту.

Как правильно заметили, для обращение к методу родителя используется конструкция parent::nameMethod()

2) Это совершенно нормальная практика, которая используется повсеместно. Конкретно про PHP на вскидку хороший пример в голову не приходит, поскольку ООП там не является определяющей язык парадигмой, а вот в той же Java развесистые кусты наследования сплошь и рядом.

Более того, многие считают практику строительства большого дерева наследования единственно верной в разрезе SOLID.

Например:

abstract class Animal{
    function die(){
        die();
    }
    abstract function move();
    abstract function say();
}
abstract class Bird extends Animal{
    abstract function say();
    function move(){
        fly();
    }
}
class Raven extends Bird{
    function say(){
        echo "КАР!!";
    }
}

Теперь у объекты класса Raven будут уметь летать через метод родителя move(), умирать через метод деда die() и каркать собственной реализацией метода say()

READ ALSO
Комментарии к PHP классу для работы с БД [требует правки]

Комментарии к PHP классу для работы с БД [требует правки]

Может кто-нибудь объяснить, как работает этот классХочу научиться использовать mvc, нашел такой класс для работы с бд, но разобраться до конца...

216
Kohana. Не работает модуль авторизации на хостинге

Kohana. Не работает модуль авторизации на хостинге

Добрый деньНачал переносить свое веб приложение на хостинг

271
Какая здесь должна быть переменная?

Какая здесь должна быть переменная?

в функции "beforeDelete' вместо $filename в

181
Yandex Music API php [требует правки]

Yandex Music API php [требует правки]

Как подключить в php api yandex музыки ? Поделитесь готовыми примерами использования music yandex api в php

259