2011-02-20 10 views
14

静的メソッドにアクセスしようとしていますが、変数をクラス名として使用しようとしています。これは可能ですか?私はそれに問題があるようです。変数クラス名(PHP)を使用して静的メソッドにアクセスする

class foo { 
    public static function bar() { 
     echo 'test'; 
    } 
} 

$variable_class_name = 'foo'; 
$variable_class_name::bar(); 

また、静的変数も同様に使用できるようにしたいと考えています。

+1

php 5.3.2で私のために良い。 –

+0

を使用して5.2私は信じています。 "Parse error:syntax error、予期しないT_PAAMAYIM_NEKUDOTAYIM in /some/path/application/models/lev_base_model.php 35行目"のようなエラーが発生する – dqhendricks

+0

実行中のPHPのバージョンは?私が知っている限り、あなたは最近のバージョンでこれを行うことができたことを認識しています(5.2 +、これが有効なときは正確にはわかりませんが)。 – GordonM

答えて

17

この構文はPHP 5.3以降でのみサポートされています。以前のバージョンでは構文が理解できないため、解析エラー(T_PAAMAYIM_NEKUDOTAYIM::演算子を参照しています)。以前のバージョンでは

あなたはそれをクラス名とそのメソッド名を含む配列を渡し、call_user_func()を試すことができます。

$variable_class_name = 'foo'; 
call_user_func(array($variable_class_name, 'bar')); 
+0

right ... so解決策はありますか? – dqhendricks

+0

@dqhendricks:私の編集 – BoltClock

+0

はすばらしそうに見えます。静的なプロパティに似たものがありますか? – dqhendricks

7

あなたはPHP 5.1と上reflectionを使用することができます。この作品

class foo { 
    public static $bar = 'foobar'; 
} 

$class = 'foo'; 
$reflector = new ReflectionClass($class); 
echo $reflector->getStaticPropertyValue('bar'); 

> foobar 
+0

+1いいです、私は反射について忘れてしまいました。 – BoltClock

関連する問題