[PHP-users 31279] Re: オーバーライドでのメソッドの拡張方法

Shindo shindo @ atsystem.jp
2007年 1月 19日 (金) 09:47:48 JST


ニシカタ 様

回答ありがとうございます。進藤です。

>正常な動作です。
>インスタンス化されているクラスはbarなので$thisはbarです。
>extendsの意味を調べてみてはいかがでしょうか。
やはりそうですか。
ただ、コードの再利用という意味では不便だなと思うのです。
例えば

クラス 八百屋 {
  店員() {
    // 野菜のスペシャリスト
    // でも、他の商品の事はもともと八百屋だから知らない
  }
}

というクラスが存在して、現在使っているとしますよね。
新たに拡張されたクラスが必要になってコードを作成する時に

クラス スーパーマーケット extends 八百屋 {
  店員() {
    // 野菜の事は八百屋クラスの店員さんにお願いして
	parent::店員();
    // その他の商品は自分が対応する
  }
}

と書きたいのです。この時、元々の八百屋クラスのメソッド達は八百屋としての
メンバー変数とメソッドしか意識しないで書かれています。
ですから、八百屋クラスの他のメソッドが店員メソッドを実行した場合に、店員
メソッドが自分たちが知らないエラーを戻したりすると誤動作します。
結局、現状だとスーパーマーケットクラスで八百屋クラスと同じ名前のメソッド
を書くことは、八百屋クラスの中を細かく知った上でしか書けない事になります。
クラスの外部仕様だけでは、親クラスを継承するクラスは書けない事になります。


>どのあたりでしょうか。
http://www.php.net/manual/ja/language.oop5.paamayim-nekudotayim.php
ここに
「二つの特別なキーワードselfとparent  がクラス定義の内部からメンバまたは
メソッドにアクセスする際に使用されます。」
と書かれていて
(例19−13)で、「return self::$my_static;」
と、ststic変数を参照しています。なので、メソッドにも適用されるのかなと考
えたのですが。

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
 進藤寿則@アットシステム   _/_/
 e-mail shindo@atsystem.jp     _/



PHP-users メーリングリストの案内