无法从$ class获取静态变量

时间:2012-08-23 08:34:27

标签: php class scope

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

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

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

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

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

出现以下错误:

  

解析错误:语法错误,

中的意外T_PAAMAYIM_NEKUDOTAYIM

当然我已经测试了做print User::$name;并且有效。所以上课。

为什么会出现这种情况呢?

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

3 个答案:

答案 0 :(得分:2)

此代码适用于PHP 5.4.3:

<?php

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

print(A::$var);

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

?>

答案 1 :(得分:2)

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

  

您可以使用reflection执行此操作。创建ReflectionClass   给定classname的对象,然后使用getStaticPropertyValue   获取静态变量值的方法。

class Demo
{
    public static $foo = 42;
}

$class = new ReflectionClass('Demo');
$value=$class->getStaticPropertyValue('foo');
var_dump($value);

答案 2 :(得分:1)

如果您没有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'));
相关问题