[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(); // オブジェクトと判定される
?>