无法从$class获取静态变量


Cant get static variable from $class

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

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

所以。。。这不是问题所在,但是我在调用类中的静态变量时遇到了一些问题,例如:

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

它给出以下错误:

分析错误:语法错误,中出现意外的T_PAAMAYIM_NEKUDOTAYIM

当然,我测试过做print User::$name;,这很有效。所以上课是有效的。

为什么会这样?有办法解决吗?

后续问题:
还有什么正当理由不使用这种"动态"方式创建类吗?

此代码在PHP 5.4.3:上运行良好

<?php
class A {
    public static $var = "Hello";
}
print(A::$var);
$className = "A";
print($className::$var);
?>

这是我在评论中链接的问题的答案:

你可以使用反射来做到这一点。创建反射类对象,然后使用getStaticPropertyValue方法来获取静态变量值。

class Demo
{
    public static $foo = 42;
}
$class = new ReflectionClass('Demo');
$value=$class->getStaticPropertyValue('foo');
var_dump($value);

如果您没有5.3及更高版本的PHP,并且不想使用反射(在我看来,这是一种过度使用-除非您想访问多个静态属性),则可以定义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'));