Ari*_*zer 20 php oop inheritance class
我想在不创建实例的情况下检查类是否是另一个类的子类.我有一个类作为参数接收类名,作为验证过程的一部分,我想检查它是否属于特定的类系列(以防止安全问题等).这样做有什么好办法吗?
Ale*_*ett 32
is_subclass_of()将正确检查一个类是否扩展另一个类,但true如果两个参数相同(is_subclass_of('Foo', 'Foo')将是false),则不会返回.
简单的相等检查将添加您需要的功能.
function is_class_a($a, $b)
{
    return $a == $b || is_subclass_of($a, $b);
}
Pet*_*ley 13
是的,有反思
<?php
class a{}
class b extends a{}
$r = new ReflectionClass( 'b' );
echo "class b "
    , (( $r->isSubclassOf( new ReflectionClass( 'a' ) ) ) ? "is" : "is not")
    , " a subclass of a";
您可以使用PHP 5.3.9中添加is_a()的第三个参数$allow_string.它允许将字符串作为第一个参数,将其视为类名:
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)
演示:http://3v4l.org/pGBkf