Как обратиться к конструктору (первого) родительского класса?

Здравствуйте.
В процессе дискуссии (ну, вы знаете, что в подобные моменты в голову приходят всевозможные мысли, что есть очень хорошо) возник вопрос - можно ли вызвать конструктор "первого" родительского класса при такой иерархии наследования:
class Prnt {
	public function __construct() {
		echo 'In Prnt';
	}
}

class A extends Prnt {
	public function __construct() {
		echo 'In A';
	}
}

class B extends A {
	public function __construct() {
		echo 'In B';
	}
}


Как в конструкторе класса В вызвать конструктор родительского класса А - вопросов не вызывает, но вот как вызвать из конструктора класса В конструктор класса Prnt (при этом, в конструкторе класса А нет обращения к конструктору класса Prnt)- здесь мы остановились на том, что нельзя подобный вызов реализовать.
Вроде бы вопрос закрыт, но всё-таки хочется услышать мнение более опытных людей.
  • Вопрос задан
  • 2723 просмотра
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
class B extends A
{
    public function __construct()
    {
        echo 'In B';
        Prnt::__construct();
    }
}

https://ideone.com/4dWP79

class B extends A
{
    public function __construct() 
    {
        echo 'In B';
 
        $reflection = new ReflectionClass(self::class);
        $parent = $reflection->getParentClass();
        while ($parent->getParentClass()) {
            $parent = $parent->getParentClass();
        }
        $class = $parent->getName();
        $class::__construct();
    }
}

https://ideone.com/XUuYme

Подобным образом можно обратиться к любому методу (не только конструктору) любого класса-предка, если область видимости позволяет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы