[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 メーリングリストの案内