Home > PHP > PHPの参照渡しについて20分で完全に理解したい その1

PHPの参照渡しについて20分で完全に理解したい その1

  • 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時間経ったし。。)

Comment:0

Comment Form
Remember personal info


Home > > PHPの参照渡しについて20分で完全に理解したい その1

Page Top