Intereting Posts

PHP получает переопределенные методы из дочернего класса

Учитывая следующий случай:

<?php class ParentClass { public $attrA; public $attrB; public $attrC; public function methodA() {} public function methodB() {} public function methodC() {} } class ChildClass extends ParentClass { public $attrB; public function methodA() {} } 

Как я могу получить список методов (и, желательно, класс vars), которые переопределены в ChildClass?

Спасибо, Джо

EDIT: Исправлено плохое расширение. Любые методы, а не только публичные.

Отражение верное, но вам нужно было бы сделать это следующим образом:

 $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 } } 

То же самое для свойств, просто вы бы использовали getProperties() .

Вы можете использовать ReflectionClass для достижения этого:

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

Это приведет к выводу:

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

См. Руководство для получения более полезной информации об отражении: http://uk3.php.net/manual/en/class.reflectionclass.php