Que*_*ark 4 php oop inheritance traversal parent
我有一个对象,想要列出所有父类,直到stdClass或其他什么.
我已经在我的数据库表中添加了一个多态字段(比如类别),并希望自动化我的finder方法,以便还返回超类,这样我就可以跳到继承树中,我知道不一定是最后的子类:
FoodCategory::find_by_id(10) === Category::find_by_id(10)
SELECT * FROM categories WHERE ..... AND type IN ('FoodCategory', 'Category');
Run Code Online (Sandbox Code Playgroud)
粗略地我猜:
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;
}
Run Code Online (Sandbox Code Playgroud)
但这会实例化一个对象,有没有人知道如何实现这个目标?
感谢任何输入,我觉得我在这里遗漏了一些明显的东西.
Chr*_*ing 10
使用反射
$class = new ReflectionClass($object);
$lineage = array();
while ($class = $class->getParentClass()) {
$lineage[] = $class->getName();
}
echo "Lineage: " . implode(", ", $lineage);
Run Code Online (Sandbox Code Playgroud)
ReflectionClass接受类的名称或对象.
在指出我已经去过的重复问题之后:
function get_class_lineage($object){
$class_name = get_class($object);
$parents = array_values(class_parents($class_name));
return array_merge(array($class_name), $parents);
}
Run Code Online (Sandbox Code Playgroud)
标准库中的class_parents函数是我忽略的显而易见的事情.
我认为反思对于这个简单的任务来说太过分了.
| 归档时间: |
|
| 查看次数: |
3593 次 |
| 最近记录: |