Можно ли вывести полную цепочку наследования класса в PHP?

#php #oop #inheritance

#php #ооп #наследование

Вопрос:

Учитывая

 class a{...}
class b extends a{...}
class c extends b{...}
class d extends c{...}
  

Есть ли способ из экземпляра class d показать, что его определение класса расширяет c, которое расширяет b, которое расширяет a? Есть ли способ сделать это статически с учетом имени класса?

Я устал ползать от файла к файлу, выясняя, что что расширяет, и так далее.

Комментарии:

1. Звучит как проблема с шаблоном проектирования, а не как проверить цепочку наследования…

Ответ №1:

Я часто использую:

 <?php
class grandfather {}
class father extends grandfather {}
class child extends father {}

function print_full_inheritance($class) {
  while ($class!==false) {
    echo $class . "n";
    $class = get_parent_class($class);
  }
}

$child = new child();
print_full_inheritance(get_class($child));

?>
  

Вы можете прочитать больше в руководстве по PHP по адресу http://php.net/manual/en/function.get-parent-class.php .

Ответ №2:

Вы хотите использовать ReflectionClass . Кто-то опубликовал ответ о том, как это сделать с помощью кода здесь: http://www.php.net/manual/en/reflectionclass.getparentclass.php

 <?php
$class = new ReflectionClass('whatever');

$parents = array();

while ($parent = $class->getParentClass()) {
    $parents[] = $parent->getName();
}

echo "Parents: " . implode(", ", $parents);
?>