水曜日, 3月 14, 2007

PHPでの内部変数の扱われ方 - PHP5のオブジェクトコピーでありがち�

PHPでの内部変数の扱われ方 - PHP5のオブジェクトコピーでありがちな勘違い

あまりにもひどいので反応しておく。

  1
2 $a = new stdClass;
3
$b = $a;
4
$a->foo = 'bar';
5
var_dump($b);
6
// この時点では $a と $b は同じインスタンス
7 // ここまでは参照渡しと同じ動きをする
8
$a = 'baz';
9
var_dump($b);
10
// $b は変更が適用される前の $a のまま
11 // 参照渡しであれば $b も変更されるはずだが、変更されない
12
?>

こんなの誰も思わないよー。
もし似たような感じで勘違いしたのなら、もっと一般的なオブジェクト指向の言語で勉強しなおしてください。
インスタンスと変数(とそのアドレス)は別物です。
というか、明示的に参照渡しにしても、今時こんな勘違いはされないと思うんだけど、誰向けの記事ですか、これは。

あと今時、フラグがあるから無駄だとか言うのは時代錯誤も甚だしい。
開発者なら参照渡しとそうでない代入の違いは押さえておくべきだけど、こんな説明いらんわと。
PHPの場合どっちみちリクエストごとにまっさらから始めるんだし、どうでもいいとすら思う。
つーか参照がダメなら他のPHPよりまともなオブジェクト指向の言語は全然ダメだと思うんだけど、そうじゃないのは何故。
そういう言語だと循環参照は気を付けなきゃないけど、それでもこんなバッドノウハウを押さえておかなきゃならないPHPより百倍マシだ、としか思えないな。
記事が下手すぎ。