我有一个对象,想要列出所有父类,直到stdClass或其他。

我已经在数据库表(例如类别)中添加了一个多态字段,并希望自动化finder方法,以便还返回父类(super class),这样我就可以跳入继承树,此时我不一定知道最终的子类:

FoodCategory::find_by_id(10) === Category::find_by_id(10)

SELECT * FROM categories WHERE ..... AND type IN ('FoodCategory', 'Category');

大概我猜:
function get_class_lineage($object){
    $class = get_parent_class($object);
    $lineage = array();
    while($class != 'stdClass'){
        $dummy_object = new $class();
        $lineage[] = $class = get_parent_class($dummy_object);
    }

    return $lineage;
}

但这实例化了一个对象,没有人知道如何实现吗?

感谢您的任何投入,我觉得我在这里遗漏了一些明显的东西。

最佳答案

使用反射

$class = new ReflectionClass($object);

$lineage = array();

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

echo "Lineage: " . implode(", ", $lineage);

ReflectionClass接受类或对象的名称。

关于php - 在继承树中获取PHP对象的祖先,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5640303/

10-10 13:53