0
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”,因为我正在动态获取类名,并且在不知道要传递给构造函数的参数的情况下无法实例化!

4

3 回答 3

2

is_a(),is_subclass_of()get_parent_class().

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

于 2012-12-05T18:28:17.253 回答
2

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

$class = new ReflectionClass('whatever');

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

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

也有许多其他有趣的ReflectionClass方法可能会对您有所帮助,因为您似乎有兴趣找出刚刚给定名称的类的属性。

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

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

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

$class = new ReflectionClass('whatever');
$const_params = $class->getConstructor()->getParameters();
var_dump($const_params);
于 2012-12-05T18:35:02.313 回答
0

您需要 Object 的实例才能使用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";
}
于 2012-12-05T18:30:57.797 回答