5

「動的」クラスの初期化について質問があります。意味を説明しましょう。

$class = 'User';
$user = new $class();

//...is the same as doing
$user = new User();

だから...それは問題ではありませんが、クラスから静的変数を呼び出すときに同じことを行うのに問題があります。たとえば、次のようになります。

$class = 'User';
print $class::$name;

これにより、次のエラーが発生します。

解析エラー:構文エラー、予期しないT_PAAMAYIM_NEKUDOTAYIM in

もちろん、私はテストを行いましprint User::$name;たが、それは機能します。したがって、クラスは機能します。

これはなぜですか、それを回避する方法はありますか?

フォローアップの質問:
クラスの作成にこの「動的」な方法を使用しない正当な理由もありますか?

4

3 に答える 3

2

このコードはPHP5.4.3でうまく機能します。

<?php

class A {
    public static $var = "Hello";
}

print(A::$var);

$className = "A";
print($className::$var);

?>
于 2012-08-23T08:41:36.553 に答える
2

これは私がコメントでリンクした質問からの答えです:

これを行うには、リフレクションを使用できます。クラス名を指定してReflectionClassオブジェクトを作成し 、getStaticPropertyValueメソッドを使用して静的変数値を取得します。

class Demo
{
    public static $foo = 42;
}

$class = new ReflectionClass('Demo');
$value=$class->getStaticPropertyValue('foo');
var_dump($value);
于 2012-08-23T08:42:19.517 に答える
1

PHPバージョン5.3以降がなく、リフレクションを使用したくない場合(私の意見では、複数の静的プロパティにアクセスする場合を除いて、これはやり過ぎです)、getter関数を定義し、call_user_funcを介して呼び出すことができます。 ():

class A {
    public static $var = "Hello";
    public static function getVar() {
        return self::$var;
    }
}
$className = "A";
echo call_user_func(array($className, 'getVar'));
于 2012-08-23T08:48:00.413 に答える