我有一个关于"动态"类初始化的问题,让我解释一下我的意思:
$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'));