我正在尝试在定义静态类属性时为其赋值:
namespace Base;
abstract class Skeleton {
protected static $entityManager = \Zend_Registry::get("EntityManager");
...
}
当我尝试执行此代码时,出现此错误:
Parse error: syntax error, unexpected '(', expecting ',' or ';' in /var/www/
somewhere/application/models/Base/Skeleton.php on line 6
如果我只是为它分配一个简单的字符串值:
protected static $entityManager = "string";
一切都很好。我在做PHP无法处理的事情吗?如果是这样,如何解决这个问题?
答案 0 :(得分:3)
您不能将需要作为类变量执行的代码放在静态或非静态。
考虑一下,Zend_Registry::get("EntityManager")
执行的时间点,在创建类时因为你将它设置为static
而无法执行。
即使它不是静态的,Zend_Registry::get("EntityManager")
何时运行?当对象被实例化或一次?它需要放在类中的函数中。
答案 1 :(得分:1)
Class properties may not depend on data that has to be evaluated at runtime:
[类成员变量]可能包含初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。
添加一个setter并在bootstrap期间设置该值。