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

Shindo shindo @ atsystem.jp
2007年 1月 19日 (金) 13:05:03 JST


伊東 様

お世話になります。進藤です。

>継承を使うと、どの言語でも同様の挙動だと思いますよ。
>#委譲とか使えればまた違うでしょうが
そうなんですね。

>クラス外から使うのと、継承した子クラス内から使うのとは根本的に違うと思いま
>す。
そのメソッドが何をやってくれるか、その為に何を渡せばよいか、実行後の副作
用を含めての影響など以外に、継承した子クラス内から使ったときに知らなけれ
ばならないことってあるのでしょうか。
違いがあることは認めますが、根本的とは思いません。

>> >スーパーマーケットの店員が独自に処理を行ないたければ、parent
>> >を呼ばずに処理を書けば良いだけです。
>> はい。そうなのですが、処理の99%が八百屋クラスと同じだとしたら、八百屋
>> クラスの店員メソッドを使いたいと思いませんか。
>
>でも、それはスーパーマーケットに八百屋の店員が出てくる理由にはならないと思
>います。
スーパーマーケットの野菜売り場の店員さんは、八百屋の店員さんとほぼ同じか
なと思ったわけです。

>そもそもfoo::main()で
>	echo "My name is foo::main.\n I am calling to foo::sub.\n";
>	$this->sub();
>て矛盾してませんか?foo::sub呼びたければ2行目はfoo::sub();とすればいいだけ
>です。
既存のコードで殆どクラス内のメソッドを呼ぶのに $this-> と書いていました。
いまさら書き直すくらいなら継承など使わないです。
でも、今後はこの様に書いていこうと思っています。

>あるいはどうしても親クラスをそのまま使いたければそのように書くだけです。
>
>class bar extends foo
>{
>	var $parent; //紛らわしい名前だけど
>	function bar() //コンストラクタ
>	{
>		$this->parent = new foo;
>	}
>	function main()
>	{
>		$this->parent->main();
>	}
>}
>
>これなら『同じソースをコピーペースト』ではないですよね。
はい。でもこれだと既存の親クラスを書き換えることになります。

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



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