2013-02-02 2 views
5

として、私はこのクラスの静的プロパティへのアクセスものクラス名として定数を使用する必要が使用して定数、それは、これがそのクラスCLASSNAMEが存在しない、エラーを返しますクラス名

class a { 

    public static $name = "Jon"; 

} 

define("CLASSNAME", "a"); 

echo CLASSNAME::$name; 

です。 いくつかの解決策がありますか?逆参照の

+1

良い質問です。うーん。 – Prash

+0

あなたが実際にやりたいことを述べているのであれば、より良い代替方法があるかもしれません。これは[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

答えて

4

それは反射で可能ですこの問題は、クラスが与えられなければならない特定のコンテキストに基づいているためです。だから私はあなたがそうのような必要とするクラスを返します。私のクラスで関数を作っ:

/** 
* Instantiate a class by class name in variable 
* 
* @param string $className The name of the class 
* @return mixed The instantiated class 
*/ 
protected function getClass($className) 
{ 
    return new $className; 
} 

あなたはクラスの名前を保持している現在のクラス内の定数を定義したときので、あなたが$class = new $this->getClass(static::CLASSNAME);を使用して、それを呼び出すことができますインスタンス化したいあなたのケースでは、 'static::'または使用したい変数を使用せずに使用できます。何らかのエラー処理を実装することを忘れないでください。

+0

はい、動作します。 – ripa

0

使用PHPの絶対的な混乱は:私が探していた

0

...

class a { 

    public static $name = "Jon"; 

} 

define("CLASSNAME", "a"); 

$obj = new ReflectionClass(CLASSNAME); 
echo $obj->getStaticPropertyValue("name"); 

それは良いデザインの選択肢がある場合は、別の質問です:

$CLASSNAME = 'a'; 
$a::$name;