PHP - get_class_methods () Sorun

2 Cevap php

Ben bu örnek kodu var:

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();

Bu yapıyor:

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

Aşağıdaki çıktıyı verir:

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

How can I make it return only the following methods?

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

Ben B sınıfı tüm yöntemlerini aramalıyız A sınıfı bir yöntem var, sorun nedeniyle get_class_methods() tarafından döndürülen değerler için sonsuz bir döngüye yol açar tabii ki.

2 Cevap

Sen tam gücü gerekebilir Reflection. Oraya gitmeden önce Ancak, böyle bir şey denemeye değer olabilir.

array_diff(get_class_methods($this), get_class_methods(get_parent_class($this)))

Sen yapamazsın. Bir sınıf uzanan işlevselliği kısmı yeni sınıfın kendisi bunları tanımlanan sanki özdeş yeni bir sınıfın genişletilmiş sınıfının bütün yöntemlerde, elde edilmesi.