PHP - get_class_methods () Проблема - PullRequest
       7

PHP - get_class_methods () Проблема

1 голос
/ 25 декабря 2009

У меня есть этот пример кода:

class A
{
 public function A_A() { /* ... */ }

 public function A_B() { /* ... */ }
}

class B extends A
{
 public function B_A() { /* ... */ }

 public function B_B() { /* ... */ }

 public function B_C()
 {
  return get_class_methods($this);
 }
}

$a = new A();
$b = new B();

Делаем это:

<code>echo '<pre>';
print_r($b->B_C());
echo '
';

Выводит следующий вывод:

Array
(
    [0] => B_A
    [1] => B_B
    [2] => B_C
    [3] => A_A
    [4] => A_B
)

Как заставить его возвращать только следующие методы?

Array
(
    [0] => B_A
    [1] => B_B
    [2] => B_C
)

IЕсли в классе A есть метод, который должен вызывать все методы класса B, проблема, конечно, в том, что он ведет к бесконечному циклу из-за значений, возвращаемых get_class_methods().

Ответы [ 2 ]

3 голосов
/ 25 декабря 2009

Возможно, вам понадобится полная сила Отражение . Однако, прежде чем идти туда, возможно, стоит попробовать что-то вроде этого.

array_diff(get_class_methods($this), get_class_methods(get_parent_class($this)))
0 голосов
/ 25 декабря 2009

Вы не можете. Часть функциональности расширения класса заключается в том, что вы получаете все методы класса, который вы расширили, в новом классе, так же, как если бы вы определили их в самом новом классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...