我有一些课程名称。 如何在没有实例化的情况下检查某个类是否继承了另一个类?
if (!class_exists($controller)) //AND I have check type
{
$objectController = new IndexController();
$objectController->index();
}
答案 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
稍微查看文档,尝试一下,如果您仍然有问题,更精确一些,那么就该主题发布另一个问题。