タイトルの様にした方が良い理由は到って単純で、
仕様変更や特殊な仕様に対応する為です(苦笑)
例えば、以下のリンク先の一番下の回答にあるソースコードの場合。以下の様に書いた方が良いのでは無いでしょうか。
class Framework {public function execute() {
$this->a();
$this->b();
}
protected function a() {
// デフォルト実装
}
protected function b() {
// デフォルト実装
}
}
まず、executeメソッドにfinalは付けない方が良いと思います。
何故なら、aメソッドとbメソッドの処理「しか」行わないという「保証」が有りません。
また、aメソッドとbメソッドの処理の順序も「必ず」この順序なのでしょうか。
aとbメソッドについては、ケースバイケースかと。
そのメソッドが何をしたいのかによって、
abstractを付けたり付けなかったりするので。
とにかく、finalは止めましょう。
メソッドに限らず、当然クラスもです。
クラスにfinalを付けると、継承すら出来なくなります。
唯一の例外は、ユーティリティクラスでしょうか。
フレームワークやライブラリは「色んな人」が使います。
業務上、カスタマイズする事も多いです。
なので、「隙間の無いガッチガチ」な作りにはしないで、
「隙間が有って余裕の有る」作りにした方が良いと思います。
筆者も気をつけますので(苦笑)