我在继承链中有两个抽象类,最终将成为一个通用库:
abstract class Foo {
public function baz() {
echo 'Foo::baz()';
}
// other methods here
}
abstract class Bar extends Foo {
public function baz() {
echo 'Bar::baz()';
}
}
这两个类是由开发人员扩展的,我的问题是我想使它的baz()
方法的实现都不能被覆盖(因为它们包含严格的符合 RFC 的代码)。制作Bar::baz()
final
没问题;但是,如果我 make Foo::baz()
final
,那么Bar
它本身显然也不能覆盖它。
PHP 5.4trait
可能会提供一个实用的解决方案,但我不能就此放弃对 PHP < 5.4 的支持。我最后的手段是保持原样并使用文档来警告开发人员不要覆盖此方法,但如果可能的话,我想找到更具体的东西。
是否有任何其他设计可以用来强制不应该重写这两种方法,同时保持代码干燥(例如,不删除继承和复制所有代码)?