PHPのオーバーロードで動的にメソッドやメンバーを作成する
宣言していないメンバーやメソッドにアクセスしようとすると、マジックメソッドが呼ばれる。
そのマジックメソッドの中でごにょごにょしてあげれば良い。
それを使うと、メソッドチェインみたいなこともできる。
<?php class Child { } class Hoge { private $values = array(); public function __get($name) { if (isset($this->values[$name]) === false) { $this->values[$name] = new Child(); } return $this->values[$name]; } } $hoge = new Hoge(); $hoge->foo->bar = 'baz'; print_r($hoge); /* Hoge Object ( [values:private] => Array ( [foo] => Child Object ( [bar] => baz ) ) ) */
Cakeのアソシエイト辺りは、こういうのを駆使してるのかなー?