2011-12-24 2 views
2

Я программирую экземпляр объекта для других объектов. Теперь мне нужно проверить экземпляр объекта.Как получить все методы подкласса?

Код, который я использую, верен, но объекты являются дочерними объектами другого объекта, поэтому дальнейшие обратные методы родителей.

Код:

<?php 
class MyParentClass 
{ 
    ... 

    $objectName = "subClassExample"; 
    $obj = new $objectName(); 
    print_r(get_class_methods($obj)); 

    ... 
} 
?> 

Возврат:

Array ([0] => __construct [1] => myMethod) 

Подкласс:

<?php 
class subClassExample extends parentClass 
{ 

    public function myMethod() 
    { 
     return null; 
    } 
} 
?> 

Мне нужно вернуться:

Array ([0] => myMethod) 

родительский класс:

<?php 
class parentClass 
{ 

    function __construct() 
    { 
     return null; 
    } 
} 
?> 

Я надеюсь, что я могу помочь, я действительно ценю это. Приветствую!

P.S .: Извините, что мой английский не является моим языком, я говорю на испанском и норвежском бокмале.

+0

Что такое '$ objectName'? Какой из них? – FakeRainBrigand

+0

$ objectName - это имя объекта ... например: $ objectName = 'subClassExample'; –

ответ

2

Вы можете сделать это с PHP's Reflection­Docs:

class Foo 
{ 
    function foo() {} 
} 

class Bar extends Foo 
{ 
    function bar() {} 
} 

function get_class_methodsA($class) 
{ 
    $rc = new ReflectionClass($class); 
    $rm = $rc->getMethods(ReflectionMethod::IS_PUBLIC); 

    $functions = array(); 
    foreach($rm as $f) 
     $f->class === $class && $functions[] = $f->name; 

    return $functions; 
} 

print_r(get_class_methodsA('Bar')); 

Выход:

Array 
(
    [0] => bar 
) 
+0

хороший, спасибо! это доказано, но только с документацией и увидеть, как я (: -}) –

0

Вы можете сделать эту проверку внутри ребенка или родительский класс, если вам нужны только методы УНИКАЛЬНО ребенка:

$cm = get_class_methods($this); //Get all child methods 
$pm = get_class_methods(get_parent_class($this)); //Get all parent methods 
$ad = array_diff($cm, $pm); //Get the diff 

Имейте в виду: get_class_methods r eturns все типы методов (public, protected и т. д.)

Смежные вопросы