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

时间:2012-01-10 16:40:07

标签: php class types

我有一些课程名称。 如何在没有实例化的情况下检查某个类是否继承了另一个类?

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

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

3 个答案:

答案 0 :(得分:17)

超级老问题,但又是谷歌搜索。

您可以使用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

答案 1 :(得分:5)

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

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

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

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

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

答案 2 :(得分:-2)

你必须使用反射,这是一个非常大的主题:

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

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