<?php class Foo { public $_foo = new stdClass; }
これがシンタックスエラー。
<?php class Foo { private $_foo = array('bar' => function() {}) }
これもシンタックスエラー。
<?php class Foo { private $_foo = array('bar' => array('baz' => 0)) public function __construct() { $b = $this->_foo['bar']; $b['buz'] = 1; } public function getBaz() { return $this->_foo['bar']['baz']; } } $f = new Foo; $f->getBaz(); // => 0
これを回避するには
<?php class Foo { private $_foo = array('bar' => array('baz' => 0)) public function __construct() { $b = &$this->_foo['bar'];// 参照を渡す! $b['buz'] = 1; } public function getBaz() { return $this->_foo['bar']['baz']; } } $f = new Foo; $f->getBaz(); // => 1
上記を応用して、2番目のClosureを入れるやつは、以下のコードならコンパイルが通る。
<?php class Foo { private $_foo = array() public function __construct() { $f = &$this->_foo; $f['bar'] = function() {}; } }
まあ、わかってる人にはわかってるけど、知らない人は絶対ハマる、というかイラつく。