[PHP]How to check if a class inherits another clas

2019-02-19 12:29发布

I have some class name. How to check if a class inherits another class without instantiating it?

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

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

标签: php class types
3条回答
爷、活的狠高调
2楼-- · 2019-02-19 13:10

You'll have to use reflection for that, it's pretty large topic:

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

Look at the doc a little, try something and if you still have questions, something more precise, then post another question on that topic.

查看更多
Fickle 薄情
3楼-- · 2019-02-19 13:13

I know this is an old question, though it ranks high on Google right now and brought me here while looking for an alternative to reflection. After not finding any, I decided to post a working example for all here.

You can do this by using reflection. Try not to rely on reflection too much since it can be resource-intensive.

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

For more info on class reflection, see http://www.php.net/manual/en/class.reflectionclass.php

For more info on reflection in general, see http://php.net/reflection

查看更多
来,给爷笑一个
4楼-- · 2019-02-19 13:14

Super old question, but again it's googling well.

You can use 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
查看更多
登录 后发表回答