在运行时确定对象的类层次结构

时间:2010-11-17 21:10:54

标签: php

get_class()会给我一个对象的最终类。

我想知道所有父类链。怎么办呢?

4 个答案:

答案 0 :(得分:26)

您可以使用

示例:

print_r(class_parents('RecursiveDirectoryIterator'));

将输出

Array
(
    [FilesystemIterator] => FilesystemIterator
    [DirectoryIterator] => DirectoryIterator
    [SplFileInfo] => SplFileInfo
)

答案 1 :(得分:6)

您可以反复调用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;
}

答案 2 :(得分:1)

如果要检查特定类型,或者构建一个函数来创建向下钻取而不使用任何其他解决方案,您可以使用'instanceof'来确定它是否也是特定类型,检查是否正确如果一个类扩展了父类。

答案 3 :(得分:0)

ReflectionClassPHP Reflection API类部分采用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";
}

Run the code