【发布时间】:2015-10-04 18:48:53
【问题描述】:
我对这个用例有一个普遍的问题:我有一个班级A。这个类有一个非抽象方法doStuffCallback(),它可以被覆盖,但不是每个子类都需要。但是:我想确保如果方法被覆盖,子类方法必须调用父母方法。
例子:
abstract class A {
private function doStuff() {
$this->doStuffCallback();
}
protected function doStuffCallback() {
// IMPORTANT CODE HERE
}
}
class B extends A {
protected function doStuffCallback() {
parent::doStuffCallback(); // I want to enforce this because the parents method code is important
// ALSO IMPORTANT CODE
}
}
因为被覆盖的方法做同样的事情,所以为相同的职责定义两个方法和一个调用两者的私有帮助方法会非常难看。像这样:
abstract class A {
private function doStuff() {
$this->callDoStuffCallback();
}
private function callDoStuffCallback() {
$this->internalDoStuffCallback();
$this->doStuffCallback();
// This is VERY ugly
}
private function internalDoStuffCallback() {
// IMPORTANT CODE HERE
}
protected function doStuffCallback() {}
}
class B extends A {
protected function doStuffCallback() {
// IMPORTANT CODE
}
}
这真是丑陋而费力。所以我的问题是:PHP 中有没有办法强制重写的方法调用父方法?
【问题讨论】:
标签: php oop abstraction