类中的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变量的常量初始值设定项。”