[PHP-users 9156] Re: クラス関数とオブジェクト関数で同一名を使うには?

Mashiki php-users@php.gr.jp
Tue, 06 Aug 2002 09:10:00 +0900


 Mashikiです。

小山さん情報ありがとうございます。

get_class($this) == 'クラス名'は考えてみましたが、おっしゃるとおり
singletonでも無い限り、事故がありそうです。

 ひとつの関数名でクラス関数としてもオブジェクト関数としても
呼び出せるのは、PHPならではの仕様だと思い、応用の仕方(クラスの
利用になれていない開発者のために通常の関数呼び出し的な利用方法も
用意しようと思った)を探っていたのですが、ここはばっさりと
あきらめることにします。


>  厳密にはないと思います。
>
>> 「Class名::メソッド名()」の場合、マニュアルに
>> 「$this を使用することはできません。」と記述されていたので、
>> $thisがセットされているかで判断しようと思いましたが、
>> 以下のような簡単な例ではうまくいくのですが、
>> もう少し複雑なプログラムになると、「Class名::メソッド名()」
>> で呼び出しても、$thisにまったく関係ない別のクラスが入っていたり
>> してうまくいきませんでした。
>> マニュアルに載っている「$this を使用することはできません。」の
>> くだりは、「使用してはいけません」のようです。
>
>  この辺は PHP のオブジェクト機能が後づけで追加されたなごりで、言語仕
>様的に弱い部分の一つだと私は思っています。
>
>  isset($this) だけじゃなくて、get_class($this) == 'classa' などと組み
>合わせると多少は精度が高くなりますが、それでも完全に判別することはでき
>ません。
>
>  Zend Engine 2 ではこの辺も議論されているのですが、どうなりますやら…。