private finalなメソッドを子クラスでpublicなものにしたい、というような状況であれば、__call()を実装してフックを掛けることで、継承先で上書きしたものを実行させることができます(PHPでは「オーバーロード」と呼んでいます)。
lang
1class Child extends Parent{
2 function __call($name, $arguments){
3 if($name==='somePrivateFinalMethod'){
4 //$argumentsを使って、本来やりたい処理を実装
5 }
6 }
7}
publicな場合は継承先で上書きできませんが、タイプヒントなどで「このクラス」と指定されたような状況でなければ、__call()や__get()、__set()を駆使して本来のオブジェクトに動作を伝えるラッパークラスを作って、その中で特定の関数だけ処理を上書きすることで、似たような挙動を実現できるかと思います。
退会済みユーザー
2014/12/19 03:10