[PHP]如何在没有实例化的情况下检查一个类是否继承了另一个类?

BIL*_*ILL 5 php types class

我有一些班级名字.如何检查一个类是否继承了另一个类而没有实例化它?

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

            $objectController = new IndexController();
            $objectController->index();
        }
Run Code Online (Sandbox Code Playgroud)

Ric*_*ers 19

超级老问题,但它再次谷歌搜索好.

你可以使用is_subclass_of:

http://php.net/manual/en/function.is-subclass-of.php

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
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,如果类名不存在,则is_subclass_of会调用自动加载器。如果第三个参数不是FALSE,则不会,但是您不能提供字符串作为第一个参数。 (2认同)

Mau*_*ice 6

我知道这是一个老问题,虽然它现在在谷歌排名很高,并把我带到这里寻找替代反思.在找不到之后,我决定在这里发布一个有效的例子.

您可以使用反射来完成此操作.尽量不要过多地依赖反射,因为它可能是资源密集型的.

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
Run Code Online (Sandbox Code Playgroud)

有关类反射的更多信息,请参阅http://www.php.net/manual/en/class.reflectionclass.php

有关反射的更多信息,请参阅http://php.net/reflection


Mat*_*lin -1

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

http://ca.php.net/manual/fr/book.reflection.php

稍微看一下文档,尝试一些东西,如果您仍然有问题,更精确的问题,然后就该主题发布另一个问题。