[PHP-users 31280] Re: オーバーライドでのメソッドの拡張方法
Hirohisa Kuwata
z-kuwata @ sra.co.jp
2007年 1月 19日 (金) 10:57:44 JST
はじめまして。桑田です。
PHP云々というよりオブジェクト指向の問題ですね。
@ Fri, 19 Jan 2007 09:47:48 +0900
Shindo <shindo @ atsystem.jp> wrote in message
<45C73B6371033Eshindo @ atsystem.jp> ...
>例えば
>
>クラス 八百屋 {
> 店員() {
> // 野菜のスペシャリスト
> // でも、他の商品の事はもともと八百屋だから知らない
> }
>}
>
>というクラスが存在して、現在使っているとしますよね。
>新たに拡張されたクラスが必要になってコードを作成する時に
>
>クラス スーパーマーケット extends 八百屋 {
> 店員() {
> // 野菜の事は八百屋クラスの店員さんにお願いして
> parent::店員();
> // その他の商品は自分が対応する
> }
>}
>
>と書きたいのです。この時、元々の八百屋クラスのメソッド達は八百屋としての
>メンバー変数とメソッドしか意識しないで書かれています。
>ですから、八百屋クラスの他のメソッドが店員メソッドを実行した場合に、店員
>メソッドが自分たちが知らないエラーを戻したりすると誤動作します。
>結局、現状だとスーパーマーケットクラスで八百屋クラスと同じ名前のメソッド
>を書くことは、八百屋クラスの中を細かく知った上でしか書けない事になります。
parentを呼ぶ時点で、呼び先のメソッドの内容は知っておく必要
がありますよね?
スーパーマーケットの店員が独自に処理を行ないたければ、parent
を呼ばずに処理を書けば良いだけです。
コードの再利用という事を考えると、八百屋もスーパーマーケット
も同じ事をする場合、この例だと八百屋にのみメソッドを用意して
おけば、スーパーマーケットでもそのメソッドを呼ぶだけで同じ処
理が出来ますよね?
メソッドをオーバーライドする、という時点で、コードの再利用を
放棄する事になると思っています。
以上
--
Hirohisa Kuwata
mailto:z-kuwata @ sra.co.jp
PHP-users メーリングリストの案内