[PHP-users 9147] Re: クラス関数とオブジェクト関数で同一名を使うには?
KOYAMA Tetsuji
php-users@php.gr.jp
Tue, 06 Aug 2002 01:55:22 +0900
小山です。
At Mon, 05 Aug 2002 23:36:22 +0900,
Mashiki wrote:
> PHPのクラス内の関数において、
> 「Class名::メソッド名()」の形式でクラス関数として呼び出されたのか、
> 「$obj->メソッド名()」の形式でオブジェクト関数として呼び出されたのか、
> 判別する方法はあるでしょうか?
厳密にはないと思います。
> 「Class名::メソッド名()」の場合、マニュアルに
> 「$this を使用することはできません。」と記述されていたので、
> $thisがセットされているかで判断しようと思いましたが、
> 以下のような簡単な例ではうまくいくのですが、
> もう少し複雑なプログラムになると、「Class名::メソッド名()」
> で呼び出しても、$thisにまったく関係ない別のクラスが入っていたり
> してうまくいきませんでした。
> マニュアルに載っている「$this を使用することはできません。」の
> くだりは、「使用してはいけません」のようです。
この辺は PHP のオブジェクト機能が後づけで追加されたなごりで、言語仕
様的に弱い部分の一つだと私は思っています。
isset($this) だけじゃなくて、get_class($this) == 'classa' などと組み
合わせると多少は精度が高くなりますが、それでも完全に判別することはでき
ません。
Zend Engine 2 ではこの辺も議論されているのですが、どうなりますやら…。
--
小山 哲志@ビート・クラフト
koyama@beatcraft.com
koyama@hoge.org