PHP:类中不允许使用备用关联数组表示法吗?

use*_*847 2 php arrays class

在PHP中,此关联数组表示法在类之外工作:

$array['a'] = array('a', 'b', 'c', 'd');
$array['b'] = array('1', '2', '3', '4');
Run Code Online (Sandbox Code Playgroud)

但是在类中,类似的表示法会导致错误:

class Foo {
    protected $array['a'] = array('a', 'b', 'c', 'd');
    protected $array['b'] = array('1', '2', '3', '4');
}

//Parse error: syntax error, unexpected '[', expecting ',' or ';'
Run Code Online (Sandbox Code Playgroud)

然而这很好用:

class Foo {
    protected $array = array('a'=>array('a', 'b', 'c', 'd'), 'b'=>array('1', '2', '3', '4'));
}
Run Code Online (Sandbox Code Playgroud)

知道发生了什么事吗?对于更大的数组,允许的表示法会变得非常麻烦.

Ita*_*vka 5

$array['a'] = array('a', 'b', 'c', 'd');
$array['b'] = array('1', '2', '3', '4');
Run Code Online (Sandbox Code Playgroud)

这意味着$ array var在第一行中定义,在第二行中你只将东西放入其中.这就是为什么它不能在类中工作,你不能两次定义相同的变量.

更重要的[]=是,它是一个修改操作符,不能在类定义中使用,同样的原因是你不能使用++符号.不是深度编程或计算机无法做到这一点,只是设计决定不在类内部的方法之外做逻辑(例如,与JS或Ruby相反).

当然,所有这些行为都可以通过引擎的"小"C黑客来改变;-)