[PHP-users 9166] Re: クラス関数とオブジェクト関数で同一名を使うには?
Mashiki
php-users@php.gr.jp
Tue, 06 Aug 2002 12:03:46 +0900
Mashikiです。
東志さん、アドバイスありがとうございます。
> クラス変数 $thisInstance を定義しておき、
> コンストラクタ ClassA()で $thisInstance = $this; とする。
> メソッド getA()では、isset($thisInstance) で判定する
phpっていわゆる「クラス変数」を定義できないですよね。
http://jp2.php.net/manual/ja/keyword.paamayim-nekudotayim.php
代わりにグローバル変数を使うサンプルを書いてみました。
あたりまえですが、一度、クラスをnewするとそれ以降判定は
全て、オブジェクトになってしまいます。
# オブジェクト変数で$thisInstanceを定義するってことかな?
# その場合も、$thisの値が信じられない以上、$this->thisInstance
# も「get_class($this) == 'classa'」より精度を上げるのは難しい
# 気がします。うまくいかない簡単なサンプルを提示できなくて
# 申し訳ないです。
<?php
class ClassA {
function ClassA() {
global $thisInstance;
$thisInstance = $this;
}
// クラス関数で呼ばれたか、オブジェクト関数で呼ばれたか?
function check() {
global $thisInstance;
return isset($thisInstance)?'オブジェクト':'クラス';
}
}
echo "<pre>\n";
echo "\n\nTest1 クラス関数呼び出し\n";
echo ClassA::check();
echo "\n\nTest2 オブジェクト関数呼び出し\n";
$a = new ClassA();
echo $a->check();
echo "\n\nTest3 クラス関数呼び出し(再)\n";
echo ClassA::check(); // オブジェクトと判定される
?>