У меня есть два абстрактных класса в цепочке наследования внутри того, что в конечном итоге станет универсальной библиотекой :
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
нет проблем;однако, если я сделаюFoo::baz()
final
, то и сам Bar
явно не может его переопределить.
trait
PHP 5.4, вероятно, предлагает практическое решение, но я не могу отказаться от поддержки PHP < 5.4 из-за этого. В крайнем случае я просто оставлю все как есть -и использую документацию, чтобы предупредить разработчиков не переопределять этот метод, но я хотел бы найти что-то более конкретное, если это возможно.
Есть ли какой-либо другой дизайн, который я могу использовать, чтобы заставить оба метода не переопределяться, одновременно сохраняя код DRY (, например. не удаляя наследство и дублируя весь код )?