我有一些班级名字.如何检查一个类是否继承了另一个类而没有实例化它?
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)
我知道这是一个老问题,虽然它现在在谷歌排名很高,并把我带到这里寻找替代反思.在找不到之后,我决定在这里发布一个有效的例子.
您可以使用反射来完成此操作.尽量不要过多地依赖反射,因为它可能是资源密集型的.
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
稍微看一下文档,尝试一些东西,如果您仍然有问题,更精确的问题,然后就该主题发布另一个问题。