动态检查类名是否是php中XYZ的子类

时间:2012-12-05 18:24:39

标签: php class

class A {}
class B extends A {}
class C extends A {}
class D extends C {}

$class="C";
if ($class instanceof A) {  //This is just for demonstration - I know instanceof won't work!!!
   $object=new $class("","",1)
}

如何检查字符串“C”以检查此类名是否是A的子项?

我调查了is_a(),但没有帮助。

我特意要求“C”,因为我动态获取类名,并且在不知道要传递给构造函数的参数的情况下无法实例化!

3 个答案:

答案 0 :(得分:2)

查看is_a()is_subclass_of()get_parent_class()

注意:这些函数需要有问题对象的实例,而不仅仅是字符串。

答案 1 :(得分:2)

您可以使用PHP的反射类来查看给定字符串名称的类继承。例如,您可以轻松地构建所有父类的数组,如下所示:

$class = new ReflectionClass('whatever');

$parents = array();
$current_class = $class;
while ($current_class = $current_class->getParentClass()) {
    $parents[] = $current_class->getName();
}
var_dump($parents);

当然,您可能会发现这比使用instanceof实例化对象更麻烦。

ReflectionClass还有很多其他有趣的方法可能对你有所帮助,因为看起来你有兴趣找到一个类的属性,只是给它的名字。

查看链接以获取更多信息:

http://php.net/manual/en/class.reflectionclass.php

例如,您可以获取当前类构造函数所需的参数信息,如下所示:

$class = new ReflectionClass('whatever');
$const_params = $class->getConstructor()->getParameters();
var_dump($const_params);

答案 2 :(得分:0)

您需要使用instanceof的对象实例,它应该是:PHP DOC on instanceOF

$class =  "C";
if (new $class instanceof A) {
    var_dump("Ok");
}

或者只是

$class = new ReflectionClass("C");
if ($class->getParentClass()->name == "A") {
    echo "OK";
}