[PHP]How to check if a class inherits another class without instantiating it?

前端 未结 3 1791
轮回少年
轮回少年 2021-01-05 11:35

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
            


        
相关标签:
3条回答
  • 2021-01-05 11:52

    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

    0 讨论(0)
  • 2021-01-05 11:54

    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.

    0 讨论(0)
  • 2021-01-05 11:57

    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
    
    0 讨论(0)
提交回复
热议问题