在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)
知道发生了什么事吗?对于更大的数组,允许的表示法会变得非常麻烦.
$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黑客来改变;-)