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)