Почти -методы final в PHP?

У меня есть два абстрактных класса в цепочке наследования внутри того, что в конечном итоге станет универсальной библиотекой :

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явно не может его переопределить.

traitPHP 5.4, вероятно, предлагает практическое решение, но я не могу отказаться от поддержки PHP < 5.4 из-за этого. В крайнем случае я просто оставлю все как есть -и использую документацию, чтобы предупредить разработчиков не переопределять этот метод, но я хотел бы найти что-то более конкретное, если это возможно.

Есть ли какой-либо другой дизайн, который я могу использовать, чтобы заставить оба метода не переопределяться, одновременно сохраняя код DRY (, например. не удаляя наследство и дублируя весь код )?

5
задан FtDRbwLXw6 16 August 2012 в 17:30
поделиться