5

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

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

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

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

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

这给出了以下错误:

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

当然,我已经测试过了print User::$name;,这很有效。所以课堂有效。

为什么会这样,有没有办法解决它?

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

4

3 回答 3

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 回答
2

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

<?php

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

print(A::$var);

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

?>
于 2012-08-23T08:41:36.553 回答
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'));
于 2012-08-23T08:48:00.413 回答