Определение иерархии классов объекта во время выполнения - PullRequest
9 голосов
/ 18 ноября 2010

get_class() даст мне возможный класс объекта.

Я хочу знать всю цепочку родительских классов. Как это можно сделать?

Ответы [ 4 ]

27 голосов
/ 18 ноября 2010

Вы можете использовать

  • class_parents - вернуть все родительские классы данного класса в массиве

Пример:

print_r(class_parents('RecursiveDirectoryIterator'));

выведет

Array
(
    [FilesystemIterator] => FilesystemIterator
    [DirectoryIterator] => DirectoryIterator
    [SplFileInfo] => SplFileInfo
)
6 голосов
/ 18 ноября 2010

Вы можете вызывать get_parent_class несколько раз, пока не вернется false :

function getClassHierarchy($object) {
    if (!is_object($object)) return false;
    $hierarchy = array();
    $class = get_class($object);
    do {
        $hierarchy[] = $class;
    } while (($class = get_parent_class($class)) !== false);
    return $hierarchy;
}
1 голос
/ 18 ноября 2010

Если вы хотите проверить наличие определенных типов или создать функцию для создания детализации без использования других решений, вы можете прибегнуть к «instanceof», чтобы определить, является ли это также конкретным типом. Это будет верно для проверки если класс расширяет родительский класс.

0 голосов
/ 18 ноября 2010

Класс ReflectionClass класса API отражения PHP имеет метод getParentClass () .

Вот небольшой пример кода с его использованием:

<?php

class A { }
class B extends A { }
class C extends B { }


$class = new ReflectionClass('C');
echo $class->getName()."\n";
while ($class = $class->getParentClass()) {
  echo $class->getName()."\n";
}

Выполнить код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...