Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-get_class_methods()问题_Php_Oop_Reflection - Fatal编程技术网

PHP-get_class_methods()问题

PHP-get_class_methods()问题,php,oop,reflection,Php,Oop,Reflection,我有以下示例代码: 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($th

我有以下示例代码:

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();
这样做:

echo '<pre>';
print_r($b->B_C());
echo '</pre>';
如何使其仅返回以下方法?

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

我在类a中有一个方法,它应该调用类B中的所有方法,问题当然是,由于
get\u class\u methods()

返回的值,它会导致无限循环。扩展类的一部分功能是,在新类中获得所扩展类的所有方法,就像在新类本身中定义它们一样。

您可能需要完全的强度。然而,在你去那里之前,可能值得尝试一下这样的东西


您可能可以检查ReflectionMethod的getDeclaringClass()结果,以检查当前类是否声明了它,但我不确定扩展类是否返回自身或继承方法的扩展来源:如果进行扩展的类重写了扩展类中的方法,则可能不会返回正确的结果,不过,谢谢Ewan,你提供的解决方案对我来说已经足够了。
Array
(
    [0] => B_A
    [1] => B_B
    [2] => B_C
)
array_diff(get_class_methods($this), get_class_methods(get_parent_class($this)))