- 2007-12-27 (木)
- PHP
なぜ20分かというと、今日は早く眠って明日朝早く起きたいので。
さて、PHPの参照渡しについて調べてみたい。
WEB+DB PRESS 総集編の7ページを見ると、
PHPでの代入は基本的にデータのコピーになります。 このため、PHPにおいては基本的に変数とデータが 一対一に対応することになります。
という一文を電車の帰りに読んではっとしました。
PHPのリファレンス(参照)はデータに付随する特別な何かを 変数に代入するというよりは、指定した変数に対して、別名を 付けるイメージに近くこの点でC言語のポインタやRubyでのリファレンス とは意味合いが異なります。
そうなのか。まずPHPのデータ型というところを
ちゃんと理解してなかったから腑に落ちなかったのだなー。
そのあたりをちゃんと知りたい。
僕はPHPを始めた時、会社の優しい先輩にはじめてPHPの
参照渡しがでてきた時、
「えーと、あれだ、つまりC言語でいうポインタみたいなもんだ」
と言われて内心Cすら分からない俺にCで言うなよ、と思ったのを
よく覚えていますが、その言葉は頭の中に残り、ずっと一緒なのだと思っていました。
つまりPHPにおいては基本的に参照はしない(ということでいいのだろうか?)
変数代入の参照渡し
$a = "hello"; $b = $a; /*通常の代入 $c = &$a; /*リファレンスによる代入(参照渡し) $a .= "goodbye"; /*$a, $cとも"hellogoodbye"になり、$bは"hello"のまま$c = 123; /*$a, $cとも"123"になり、$bは"hello"のまま
これがjavascriptだったら、
var a = [1,2,3]; var b = a; a[0] = 99; alert(b);
となって一見同じに見えるけど全然違う。
ということを書こうと思ったけど、話が大きくなりそうなので、
今日はここまでにします。
PHP第1回:PHP基礎(関数/参照渡し/デフォルト値/スコープ)
ここを見ると、
つまり、foo 関数は引数が「値(This is a pen.)」として渡されたのに対し、 hoge関数は引数が格納されている場所の「アドレス」が渡されています(という説明ではピンときませんよね。。。)。
アドレスが渡されている、という言い方をしているなー??
完全に理解してもう一度まとめた記事を書きたいと思います。
(結局1時間経ったし。。)
- Newer: Yahoo!Pipesでほぼ日のコラムのRSSを作ってみた
- Older: 公と私