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

动态检查类名是否是php中XYZ的子类,php,class,Php,Class,a如何检查字符串“C”以检查该类名是否是a的子类 我查看了is_a(),但没有帮助 我特别要求使用“C”,因为我是动态获取类名的,如果不知道要传递给构造函数的参数,我就无法实例化 看看,或者 注意:这些函数需要相关对象的实例,而不仅仅是字符串。查看,或 注意:这些函数需要相关对象的实例,而不仅仅是字符串。您需要对象的实例才能使用实例 或者干脆 $class = "C"; if (new $class instanceof A) { var_dump("Ok"); } 您需要对象的实例

a如何检查字符串“C”以检查该类名是否是a的子类

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

我特别要求使用“C”,因为我是动态获取类名的,如果不知道要传递给构造函数的参数,我就无法实例化

看看,或者

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

查看,或


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

您需要对象的实例才能使用
实例

或者干脆

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

您需要对象的实例才能使用
instanceof
它应该是:

或者干脆

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

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

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

$parents = array();
$current_class = $class;
while ($current_class = $current_class->getParentClass()) {
    $parents[] = $current_class->getName();
}
var_dump($parents);
当然,您可能会发现这比使用
instanceof
实例化对象更麻烦

ReflectionClass
还有许多其他有趣的方法,可能会对您有所帮助,因为您似乎对查找刚命名的类的属性感兴趣

查看链接以了解更多信息:

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

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

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

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

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

$parents = array();
$current_class = $class;
while ($current_class = $current_class->getParentClass()) {
    $parents[] = $current_class->getName();
}
var_dump($parents);
当然,您可能会发现这比使用
instanceof
实例化对象更麻烦

ReflectionClass
还有许多其他有趣的方法,可能会对您有所帮助,因为您似乎对查找刚命名的类的属性感兴趣

查看链接以了解更多信息:

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

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

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

我的问题是如何检查字符串!get_parent_类上的文档似乎暗示它可以用来检查类或对象,但它是的子类,只是举个例子,但我还没有测试@JASONCCREARY实际上可以使用PHP的
ReflectionClass
来实现这一点。有关更多信息,请参见我的答案。@
这些函数需要相关对象的实例,而不仅仅是字符串。
:这个答案有点旧,所以当时可能是真的。但现在不是这样,他们可以接受类名而不仅仅是实例。我的问题是如何检查字符串!get_parent_类上的文档似乎暗示它可以用来检查类或对象,但它是的子类,只是举个例子,但我还没有测试@JASONCCREARY实际上可以使用PHP的
ReflectionClass
来实现这一点。有关更多信息,请参见我的答案。@
这些函数需要相关对象的实例,而不仅仅是字符串。
:这个答案有点旧,所以当时可能是真的。但现在不是这样,他们可以接受类名而不仅仅是实例。我特别要求使用“C”,因为我是动态获取类名的,如果不知道要传递给构造函数的参数,我就不能实例化!我特别要求使用“C”,因为我是动态获取类名的,如果不知道要传递给构造函数的参数,我就无法实例化!谢谢-这看起来很有趣。我编辑了这个问题来解释我不能实例化!再次感谢!事实上,我使用了您的第二个示例getConstructor()->getParameters(),并结合了isOptional()、getDefault()和isArray()来完成我需要的工作。我的问题是,我正在使用一个类库,这些类库相互继承,并具有构造函数所需的不同数量的参数,其中一些具有默认值,我的代码正在基于元数据动态实例化一个类。@neyl没问题。很高兴能帮忙。如您所见,PHP提供了非常强大的反射工具。谢谢-这看起来很有趣。我编辑了这个问题来解释我不能实例化!再次感谢!事实上,我使用了您的第二个示例getConstructor()->getParameters(),并结合了isOptional()、getDefault()和isArray()来完成我需要的工作。我的问题是,我正在使用一个类库,这些类库相互继承,并具有构造函数所需的不同数量的参数,其中一些具有默认值,我的代码正在基于元数据动态实例化一个类。@neyl没问题。很高兴能帮忙。如您所见,PHP提供了非常强大的反射工具。