5

使用 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
}
4

1 回答 1

10

ReflectionMethod::getPrototype.

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

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

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

如果类匹配,则不会被覆盖,否则会被覆盖。


或者,如果您知道两个类名,只需$declaringClass与另一个类名进行比较。

于 2013-05-13T13:39:20.023 回答