无法从$ class获取静态变量

jam*_*lin 5 php scope class

我有一个关于"动态"类初始化的问题,让我解释一下我的意思:

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

//...is the same as doing
$user = new User();
Run Code Online (Sandbox Code Playgroud)

所以......这不是问题所在,但是在从类中调用静态变量时遇到同样的问题,例如:

$class = 'User';
print $class::$name;
Run Code Online (Sandbox Code Playgroud)

这给出了以下错误:

解析错误:语法错误,意外T_PAAMAYIM_NEKUDOTAYIM

当然,我已经测试过,print User::$name;并且有效.所以上课有效.

为什么会这样,有没有办法绕过它?

跟进问题:
还有没有正确的理由不在创建类中使用这种"动态"方式?

Iva*_*jak 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'));
Run Code Online (Sandbox Code Playgroud)