php - 在继承树中获取 PHP 对象的祖先

标签 php oop inheritance parent traversal

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

我已经在我的数据库表中添加了一个多态字段(比如类别)并且想要自动化我的查找器方法以便也返回父类(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/

相关文章:

spring - 如何在没有继承的情况下在我的测试中共享 @MockBeans 和模拟方法?

php - 从同一 WordPress 数据库中的表中获取所有相关数据

php - PHP 获取第 n 层多维数组中 key 的值

javascript - 如果未使用新运算符,则返回一个新对象

java - Python 中的嵌套对象

.net - 具有不变类型集合的 WCF OData 服务方法

java - 如何在 Java 中将 ArrayList<ArrayList<String>> 转换为 List<List<String>>?

尝试使用 mysqli_connect() 连接到数据库时,PHP 查找数据库时出错

php - 是否可以将路由参数传递给 Laravel 中的 Controller 构造函数?

objective-c - 我应该在我自己的代码之后还是之前调用 [super superMethod]?