たまにチェックしていきたいと思いますが、PHPフレームワークのトレンド。私がCakePHPを使うモチベーション。Symfonyが追い上げとる。
newと参照と私の内容ですが、いったい何故私がはまらねばならなかったのか、わかりにくいので追記。
class RefObj {
var $val;
function RefObj($val) {
$this->val = $val;
}
function out() {
echo $this->val . "\n";
}
}
class Hoge {
var $foo;
function Hoge() {
$this->foo = array();
}
function add(&$data) {
$this->foo[] =& $data;
}
function outAll() {
foreach ($this->foo as $data) {
$data->out();
}
}
}
$hoge = new Hoge();
for ($i = 0; $i < 3; $i++) {
$data = new RefObj($i); // (1)
$hoge->add($data);
}
$hoge->outAll();
上記の結果は
2
2
2
(1)での代入で$dataの入れ物は変わらず、Hoge::add()は参照を受け取るので、Hoge::$fooの要素は全て同じ入れ物を指すということになり、結果、全部2になるわけです。(newと参照と私を参照のこと。駄洒落ではない。)
(1)で$data =& new RefObj($i)とすれば、結果は
0
1
2
となります。
以上