Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
[PHP]如何检查一个类是否继承另一个类而不实例化它?_Php_Class_Types - Fatal编程技术网

[PHP]如何检查一个类是否继承另一个类而不实例化它?

[PHP]如何检查一个类是否继承另一个类而不实例化它?,php,class,types,Php,Class,Types,我有一些类名。 如何检查一个类是否继承了另一个类而不实例化它 if (!class_exists($controller)) //AND I have check type { $objectController = new IndexController(); $objectController->index(); } 为此,您必须使用反射,这是一个相当大的主题: 稍微看一看文档,尝试一些东西,如果你

我有一些类名。 如何检查一个类是否继承了另一个类而不实例化它

 if (!class_exists($controller)) //AND I have check type
        {

            $objectController = new IndexController();
            $objectController->index();
        }

为此,您必须使用反射,这是一个相当大的主题:


稍微看一看文档,尝试一些东西,如果你还有问题,可以更准确地回答,然后在这个主题上发布另一个问题。

我知道这是一个老问题,尽管它现在在谷歌排名很高,我在这里寻找反思的替代方案。在没有找到任何示例之后,我决定在这里为所有人发布一个工作示例

您可以通过使用反射来实现这一点。尽量不要过分依赖反射,因为反射可能会占用大量资源

class TestA {}
class TestB extends TestA {}
class TestC extends TestA {}

$reflector = new ReflectionClass('TestA');
$result    = $reflector->isSubclassOf('TestA');
var_dump($result); // false

$reflector = new ReflectionClass('TestB');
$result    = $reflector->isSubclassOf('TestA');
var_dump($result); // true

$reflector = new ReflectionClass('TestC');
$result    = $reflector->isSubclassOf('TestA');
var_dump($result); // false
有关类反射的更多信息,请参见


有关一般反射的更多信息,请参见您可以使用
is\u subclass\u:


你有没有看过像《精细手册》这样不够有用的东西?我需要在不创建对象的情况下检查类型。@jprofitt:在找到重复项之前,你有没有试过阅读这个问题?@zerkms从上一个问题开始。然而,我确实记得这一次,并意识到在投票结束后,这是一个错误的语言。因为你不能撤消你的投票,所以我当时无能为力。然而,我将投票(我和你一样)重新打开。最后的结果返回“true”,而不是“false”,因为TestC扩展了TestA。另外,如果TestD扩展了TestB,那么(newreflectionclass('TestD'))->isSubclassOf('TestA');应该返回“真实”投票,不是因为它的答案是错误的,而是因为有更好的答案。如果答案一点也不坏,你不应该投反对票,你不应该投赞成票,而应该投赞成票。。。你让我丢了分数,因为作者选择了错误的答案,因此无缘无故地惩罚我。。。就我两个世纪的时间,问题出在stackoverflow。排名靠前的答案应该是得票最多的答案。我来这里是为了找到一个简单的答案,和往常一样,我会寻找被选中的答案。但我真正需要的是它的子类,它简单、快速,并且可以完成任务。值得注意的是,如果类名不存在,它可以调用autoloader。如果第三个参数为FALSE,则不需要设置,但是不能提供字符串作为第一个参数。
class TestA {}
class TestB extends TestA {}
class TestC extends TestB {}

var_dump(is_subclass_of('TestA', 'TestA')); // false
var_dump(is_subclass_of('TestB', 'TestA')); // true
var_dump(is_subclass_of('TestC', 'TestA')); // true