PHP:确定类是否是另一个类的扩展

时间:2011-05-20 14:54:06

标签: php oop reflection

如何测试一个类是否按名称扩展另一个类?

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

$class_name = 'B';
if (class_extends_another($class_name, 'A')) {
   // Yep
}

$class_name = 'C';
if (class_extends_another($class_name, 'A')) {
   // Nope
}

3 个答案:

答案 0 :(得分:1)

我认为class_parents函数是最简单的解决方案,但应该注意的是,这仅适用于PHP 5.1及更高版本。

例如,如果您想查看'B'是否扩展'A',您可以使用:

if(in_array('A', class_parents('B'))) {
    // B extends A.
}

顺便提一下,应该注意的是,根据文档,您可以向class_parents函数提供对象(类实例)或字符串(类名),这可能会有用。

答案 1 :(得分:1)

我认为

get_parent_class()

是您正在寻找的。这将返回父类的名称。

http://www.php.net/manual/en/function.get-parent-class.php

答案 2 :(得分:1)

根据您的要求,您可能还需要instanceof运算符。

如果$a instanceof A是类$a的实例,或任何扩展A的类(包括它是{{1}的实例),则

A将为true扩展C扩展B)或A(如果使用接口)。见http://php.net/instanceof