为什么这不起作用?
class Test{
private $vars = array('ALL' => 0,
'ONE' => 1);
private $var = $vars['ALL']; // this does not work
function __construct(){
$this->var = $vars['ALL']; // this does work
}
}
代码示例:http://codepad.org/QSjHMDij
为什么数组在语句
中无法访问private $var = $vars['ALL']; // this does not work
答案 0 :(得分:3)
可能是因为在构造函数被调用之前在类的初始化期间无法访问$this
(当你尝试在$ var的定义中执行它时暗示了这种情况。)某些语言(如C#) )会让你这样做,但我认为PHP是不会的。
答案 1 :(得分:0)
两者都没有按照你想要的方式“起作用”。在声明实例成员时不允许使用变量(因此unexpected T_VARIABLE
错误)。在构造函数中,您引用了一个名为$vars
的本地变量,该变量不存在,这意味着您将$this->var
设置为NULL
。
执行$this->vars
访问实例成员。您只能在构造函数中执行此操作。
答案 2 :(得分:0)
声明成员(变量)时,无法分配其他成员的数组键值,导致解析错误。
例如,您正在考虑(错误)$vars['ALL']
指的是您的private $var
- 它不是 - 它也会导致解析错误。当你说:
private $var = $vars['ALL'];
你实际上在说“我希望$ this-> vars ['ALL']的值被分配给$ this-> var”,至少不是你写的方式。这就是为什么你从一个函数中做到这一点,你可以轻松地操作成员,就像你从构造函数中做到的那样。
您应该声明成员,他们的可见性并设置一些默认值(就像您为$var
所做的那样),但是您不应该将它们指向其他成员的值,它只是 - 错误而且幸运 - 它没有'工作:))
答案 3 :(得分:0)
您正在尝试为设计为对象的一部分而不是类的变量赋值。你想要的是static
变量。