类中的php数组

时间:2011-05-05 11:02:34

标签: php

为什么这不起作用?

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

4 个答案:

答案 0 :(得分:3)

可能是因为在构造函数被调用之前在类的初始化期间无法访问$this(当你尝试在$ var的定义中执行它时暗示了这种情况。)某些语言(如C#) )会让你这样做,但我认为PHP是不会的。

答案 1 :(得分:0)

两者都没有按照你想要的方式“起作用”。在声明实例成员时不允许使用变量(因此unexpected T_VARIABLE错误)。在构造函数中,您引用了一个名为$vars的本地变量,该变量不存在,这意味着您将$this->var设置为NULL

执行$this->vars访问实例成员。您只能在构造函数中执行此操作。

答案 2 :(得分:0)

声明成员(变量)时,无法分配其他成员的数组键值,导致解析错误。

例如,您正在考虑(错误)$vars['ALL']指的是您的private $var - 它不是 - 它也会导致解析错误。当你说:

时,PHP无法知道
private $var = $vars['ALL'];

你实际上在说“我希望$ this-> vars ['ALL']的值被分配给$ this-> var”,至少不是你写的方式。这就是为什么你从一个函数中做到这一点,你可以轻松地操作成员,就像你从构造函数中做到的那样。

您应该声明成员,他们的可见性并设置一些默认值(就像您为$var所做的那样),但是您不应该将它们指向其他成员的值,它只是 - 错误而且幸运 - 它没有'工作:))

答案 3 :(得分:0)

您正在尝试为设计为对象的一部分而不是类的变量赋值。你想要的是static变量。