[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