Zend和静态类属性

时间:2010-09-02 13:28:25

标签: php zend-framework doctrine-orm

我正在尝试在定义静态类属性时为其赋值:

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无法处理的事情吗?如果是这样,如何解决这个问题?

2 个答案:

答案 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期间设置该值。