我有一个关于“动态”类初始化的问题,让我解释一下我的意思:
$class = 'User';
$user = new $class();
//...is the same as doing
$user = new User();
所以......这不是问题,但是在从类中调用静态变量时我也遇到了一些麻烦,例如:
$class = 'User';
print $class::$name;
出现以下错误:
解析错误:语法错误,
中的意外T_PAAMAYIM_NEKUDOTAYIM
当然我已经测试了做print User::$name;
并且有效。所以上课。
为什么会出现这种情况呢?
跟进问题:
还有没有正当理由不在创建类中使用这种“动态”方式?
答案 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'));