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