Php 检查一个类是否是另一个类的子类

Php 检查一个类是否是另一个类的子类,php,class,oop,inheritance,Php,Class,Oop,Inheritance,我想检查一个类是否是另一个类的子类,而不创建实例。我有一个类,它接收一个类名作为参数,作为验证过程的一部分,我想检查它是否属于特定的类族(以防止安全问题等)。有什么好办法吗?是的,有 签出。从PHP5开始,它接受两个参数作为字符串 您也可以使用,如果类或其任何子类匹配,它将返回true。将正确检查一个类是否扩展了另一个类,但如果两个参数相同(是('Foo','Foo')的子类将是false) 简单的相等性检查将添加所需的功能 function is_class_a($a, $b) { r

我想检查一个类是否是另一个类的子类,而不创建实例。我有一个类,它接收一个类名作为参数,作为验证过程的一部分,我想检查它是否属于特定的类族(以防止安全问题等)。有什么好办法吗?

是的,有

签出。从PHP5开始,它接受两个参数作为字符串

您也可以使用,如果类或其任何子类匹配,它将返回true。

将正确检查一个类是否扩展了另一个类,但如果两个参数相同(
是('Foo','Foo')的子类
将是
false

简单的相等性检查将添加所需的功能

function is_class_a($a, $b)
{
    return $a == $b || is_subclass_of($a, $b);
}
您可以与PHP5.3.9中添加的第三个参数
$allow_string
一起使用。它允许将字符串作为第一个参数,并将其视为类名:

例子: 输出:
演示:

这种编写方式令人困惑,问题实际上是如何确定一个类是否是另一个类的子类。is_a()适用于对象实例,而不是类本身的名称。这不适用于相对命名空间的类。例如,
is_class\u a('stdClass','\stdClass')
将返回FALSE,即使它们是一个相同的类。根据@sirlancelot下面的答案使用
instanceof
function is_class_a($a, $b)
{
    return $a == $b || is_subclass_of($a, $b);
}
interface I {}
class A {}
class B {}
class C extends A implements I {}

var_dump(
    is_a('C', 'C', true),
    is_a('C', 'I', true),
    is_a('C', 'A', true),
    is_a('C', 'B', true)
);
bool(true)
bool(true)
bool(true)
bool(false)