6

例:

class LOL{
  const
    FOO = 1;
}

$x = new LOL;
$arr = array('x' => $x);

echo $x::FOO; // works
echo $arr['x']::FOO; // works too

しかし、クラス インスタンスをプロパティにすると、定数にアクセスできなくなります。

class WWW{
  protected $lol;

  public function __construct($lol){
    $this->lol= $lol;    
  }

  public function doSMth(){
    echo $this->lol::FOO; // fail. parse error.. wtf
  }
}

$w = new WWW;
$w->doSMth();

:(

できることはわかっていますecho LOL::FOOが、クラス名が不明な場合はどうなりますか? その位置から、私はそのオブジェクト/プロパティにしかアクセスできず、その WWW クラスが他のクラスとその名前を「認識」したくありません。指定されたオブジェクトで動作するはずです

4

3 に答える 3

1

クラス名がわからない場合は、ReflectionClassを使用して定数を取得できます。PHP 5 以降を使用している必要があります。

例:

$c = new ReflectionClass($this->lol);
echo $c->getConstant('FOO'); // 1

PHP 5.3.0 以降、クラス名を含む変数を介して定数にアクセスできます。

$name = get_class($this->lol);
echo $name::FOO; // 1

詳細については、スコープ解決演算子 - PHPを参照してください。

于 2012-07-14T16:14:14.447 に答える
0
$lol = &$this->lol;
echo $lol::FOO;
..
unset($lol);
于 2014-08-20T22:25:53.157 に答える