#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);
?>