类中的php数组

类中的php数组,php,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 } } 此处的代码示例:

为什么这不起作用

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
  }
}
此处的代码示例:

为什么在语句中不能访问数组

private $var = $vars['ALL']; // this does not work

可能是因为在调用构造函数之前,在初始化类的过程中无法访问
$this
(这在$var的定义中是暗示的),某些语言(如C#)会允许您这样做,但我认为PHP是不会的。

可能是因为在调用构造函数之前(在$var的定义中尝试这样做时暗示)在初始化类期间无法访问
$this
。某些语言(如C#)会允许您这样做,但我认为PHP也是不会的。

“以您想要的方式工作”。在声明实例成员时不允许使用变量(因此出现
意外T_变量
错误)。在构造函数中,您引用的是名为
$vars
的局部变量,该变量不存在,这意味着您正在将
$this->var
设置为
NULL

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

两者都不能按预期方式“工作”。在声明实例成员时不允许使用变量(因此出现
意外T_变量
错误)。在构造函数中,您正在引用一个名为
$vars
的局部变量,该变量不存在,这意味着您正在将
$this->var
设置为
NULL

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

声明成员(变量)时,您不能分配其他成员的数组键值,这会导致分析错误

例如,您(错误地)认为,
$var['ALL']
指的是您的
私有$var
——事实并非如此——这也会导致解析错误。当您说:

private $var = $vars['ALL'];
您实际上是在说“我希望$this->vars['ALL']的值被分配给$this->var”,至少不是您编写它的方式。这就是为什么您在函数中这样做的原因,在函数中您可以轻松地操纵成员,就像您在构造函数中所做的那样

您应该声明成员及其可见性并设置一些默认值(就像您为
$var
所做的那样),但您不应该将它们指向其他成员的值,这是完全错误的,幸运的是,它不起作用:)

当声明成员(变量)时,您不能分配其他成员的数组键值,这会导致解析错误

例如,您(错误地)认为,
$var['ALL']
指的是您的
私有$var
——事实并非如此——这也会导致解析错误。当您说:

private $var = $vars['ALL'];
您实际上是在说“我希望$this->vars['ALL']的值被分配给$this->var”,至少不是您编写它的方式。这就是为什么您在函数中这样做的原因,在函数中您可以轻松地操纵成员,就像您在构造函数中所做的那样


您应该声明成员及其可见性并设置一些默认值(就像您对
$var
所做的那样),但您不应该将它们指向其他成员的值,这是错误的,幸运的是,它不起作用:)

您试图将值分配给设计为对象的一部分的变量,而不是类。您想要的是
静态
变量。

您试图将值分配给设计为是对象的一部分,而不是类。您需要的是
静态变量。

但我在第8行中没有使用$this。(顺便说一句,这是代码板示例中的第8行。这里是第6行。)你不必:它是隐含的。如果你不能访问<代码> $< /C>,你也不能访问任何成员变量。Eddi:实际上,它甚至可能没有暗示:我忘记了它是真的,但是PHP可能没有与C++和C语言相同的范围分辨率。PHP经常做不寻常的范围解析来避免歧义,所以我不会感到惊讶。n我假设变量只有在对象初始化时才初始化?你是说在调用构造函数时吗?是的。更重要的是,因为PHP强制执行它,虽然-我希望PHP按照您编写变量的顺序初始化变量,但这并不意味着您可以这样访问它们。我们发现:“在PHP4中,只允许变量变量的常量初始值设定项。”但我不在第8行使用$this。(顺便说一句,这是代码板示例中的第8行。这里是第6行。)你不必:它是隐含的。如果你不能访问<代码> $< /C>,你也不能访问任何成员变量。Eddi:实际上,它甚至可能没有暗示:我忘记了它是真的,但是PHP可能没有与C++和C语言相同的范围分辨率。PHP经常做不寻常的范围解析来避免歧义,所以我不会感到惊讶。n我假设变量只有在对象初始化时才初始化?你是说在调用构造函数时吗?是的。更重要的是,因为PHP强制执行它,虽然-我希望PHP按照您编写变量的顺序初始化变量,但这并不意味着您可以这样访问它们。我们发现:“在PHP4中,仅允许var变量的常量初始值设定项。”