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