PHP get overridden methods from child class

后端 未结 2 746
不思量自难忘°
不思量自难忘° 2021-01-02 11:45

Given the following case:



        
相关标签:
2条回答
  • 2021-01-02 12:28

    Reflection is correct, but you would have to do it like this:

    $child  = new ReflectionClass('ChildClass');
    
    // find all public and protected methods in ParentClass
    $parentMethods = $child->getParentClass()->getMethods(
        ReflectionMethod::IS_PUBLIC ^ ReflectionMethod::IS_PROTECTED
    );
    
    // find all parent methods that were redeclared in ChildClass
    foreach($parentMethods as $parentMethod) {
        $declaringClass = $child->getMethod($parentMethod->getName())
                                ->getDeclaringClass()
                                ->getName();
    
        if($declaringClass === $child->getName()) {
            echo $parentMethod->getName(); // print the method name
        }
    }
    

    Same for Properties, just you would use getProperties() instead.

    0 讨论(0)
  • 2021-01-02 12:47

    You can use ReflectionClass to achieve this:

    $ref = new ReflectionClass('ChildClass');
    
    print_r($ref->getMethods());
    print_r($ref->getProperties());
    

    This will output:

    Array
    (
        [0] => ReflectionMethod Object
            (
                [name] => methodA
                [class] => ChildClass
            )
    
    )
    
    Array
    (
        [0] => ReflectionProperty Object
            (
                [name] => attrB
                [class] => ChildClass
            )
    
    )
    

    See the manual for more useful information on reflection: http://uk3.php.net/manual/en/class.reflectionclass.php

    0 讨论(0)
提交回复
热议问题