継承チェーンには2つの抽象クラスがあり、最終的には汎用ライブラリになります。
abstract class Foo {
public function baz() {
echo 'Foo::baz()';
}
// other methods here
}
abstract class Bar extends Foo {
public function baz() {
echo 'Bar::baz()';
}
}
これらの2つのクラスは開発者によって拡張されることを意図しており、私の問題は、baz()
メソッドのどちらの実装もオーバーライドできないようにすることです(厳密なRFC準拠のコードが含まれているため)。作るBar::baz()
final
のは問題ありません。ただし、を作成した場合Foo::baz()
final
、それBar
自体も明らかにオーバーライドできません。
PHP 5.4trait
は実用的な解決策を提供する可能性がありますが、これ以上PHP<5.4のサポートをやめることはできません。私の最後の手段は、そのままにして、ドキュメントを使用して開発者にこのメソッドをオーバーライドしないように警告することですが、可能であれば、より具体的なものを見つけたいと思います。
コードをDRYに保ちながら(たとえば、継承を削除せず、すべてのコードを複製しないで)、両方のメソッドをオーバーライドしないように強制するために使用できる他の設計はありますか?