PHP 変数 その3 【初級編 第8回】
前回は変数を使用する際の記述のルールなどを記載しました。
今回は通常の変数の代入のしかたとは別の方法を記載したいと思います。
変数への変数の代入
変数への代入は数値や文字列以外に、変数を変数に代入することもできます。
代入のしかたは簡単で、数値や文字列を以下のように変数名にするだけです。
<?php $hensuu1 = 4; $hensuu2 = $hensuu1; echo $hensuu2; ?>
このように変数に変数を代入すると、代入する変数に格納された値がコピーされます。
上記の記述をして、ブラウザから確認すると 4 という値が表示されます。
変数の参照渡し
以下のようにした場合、$hen1, $hen2 には同じ値が設定されることは話しました。
<?php $hen1 = "aaa"; $hen2 = $hen1; echo $hen1."<br>n"; echo $hen2."<br>n"; ?>
上記の場合、$hen1, $hen2 はメモリ上の別々の場所に領域をとっているので、$hen1 を変更したら $hen2 も変わるということはありません。
しかし $hen1 を変更したら $hen2 も同じ値に変えたい、または $hen2 を変更したら $hen1 も同じ値に変わるようにしたい場合はこの方法ではできません。
このような場合は「参照渡し」という方法を用いることによって解決することができます。
参照渡しを使用するには 変数名の前に & をつけます。
以下では、$hen2にはいつもどおりに $hen1 の値をコピーして代入し、$hen3 に $hen1 を参照渡しで代入することによって
$hen1 の値を変更するとどう変わるかというところを確認しています。
<?php $hen1 = "aaa"; $hen2 = $hen1; $hen3 = &$hen1; echo "1: ".$hen1."<br>n"; echo "2: ".$hen2."<br>n"; echo "3: ".$hen3."<br>n"; $hen1 = "bbb"; echo "4: ".$hen1."<br>n"; echo "5: ".$hen2."<br>n"; echo "6: ".$hen3."<br>n"; ?>
上記の場合、$hen3 に対して値のコピーではなく、$hen1 のアドレスを渡しています。
アドレスを渡すと、$hen1 と $hen3 は同じアドレスを共有しているということになります。
つまりそれぞれの変数の中身は同じアドレスを参照するということになるので
その値を変更すると、$hen1, $hen3 の中身が変わるということになるのです。
そのため途中で $hen1 に対して値の書き換えを行うと、$hen3 も変わったことがわかります。
$hen2 は $hen1 の値のコピーなのでメモリ上の別の個所を使用していることになります。
そのため $hen1の値を書き換えても $hen2が変わることはありません。
ひとまず今回はここまで、次回は変数の型などについて記述していきたいと思います。