使用php,一个类如何确定一个子类是否重写了一个子类的方法?
分为以下两类:

class Superclass {
    protected function doFoo($data) {
        // empty
    }

    protected function doBar($data) {
        // empty
    }
}

class Subclass extends Superclass {
    protected function doFoo($data) {
        // do something
    }
}

如何将一个方法添加到将根据其哪些方法已被重写而执行不同操作的超类中?
例如:
if ([doFoo is overridden]) {
    // Perform an action without calling doFoo
}
if ([doBar is overridden]) {
    // Perform an action without calling doBar
}

最佳答案

ReflectionMethod::getPrototype

$foo = new \ReflectionMethod('Subclass', 'doFoo');

$declaringClass = $foo->getDeclaringClass()->getName();
$proto = $foo->getPrototype();

if($proto && $proto->getDeclaringClass()->getName() !== $declaringClass){
  // overridden
}

如果类匹配,则不重写,否则重写。
或者如果您知道这两个类名,只需将$declaringClass与另一个类名进行比较。

08-07 19:30