代入を理解する 変数で値を代入する時の挙動は?
変数に値を代入する時、値はどう移り変わるのか。値を代入するとはどういうことなのかなど、代入に関して理解を深めます。
値の代入での挙動は、プログラミングにおいて知っておいた方が良いでしょう。
変数と代入の書式
変数と代入の書式は、左項に変数名を書き、右項には変数に代入する値を書く書き方です。代入演算子「=」で左項と右項を隔てる形で書き、左項に置いた変数に、代入演算子を使って右項の値を代入、という意味合いになります。
$sample = 10;
上の記述は、$sampleという変数に「10」を代入しています。
代入の動きを理解する
次の2通りの変数があったとします。
<?php
$a = 5;
$b = $a;
?>
$a に「5」が入っています。$b = $a によって $b に「5」が入ります。この時、$a の値が $b に移って、$a が空になりそうですが、そうはなりません。
なぜなら代入とは、値を左項から右項に移すのではなく、右項の値をコピーして左項に入れる操作のことだからです。
もう1つ例をあげます。
<?php
$a = 5;
$b = $a + 1;
var_dump($a); // $aの結果を出力する。
var_dump($b); // $bの結果を出力する。
?>
$a には「5」が入っています。2行目では $a に「1」を足した結果を $b に代入しています。$a と $b、それぞれの中身を var_dump( ) で出力します。
出力結果は次のようになります。
int(5) int(6)
$a の中身は「5」で $b の中身は「6」でした。ここで重要なのは、2行目で $a + 1 しているのに、$a の中身は「5」のままだった点です。
2行目で、$a の中身そのものに「1」を足したわけでなく、2行目の $a にはコピーが入っているだけなので、コピーに「1」を足しても元の $a の中身は「5」のままだった、というわけです。
$a の中身に「1」が足されて $a そのものが「6」に変わるわけではありません。
定義した変数を活用することは、コピーされた値を活用することに等しいのです。
代入が行われる順番
次のような代入を行ったとします。
<?php
$a = $b = $c = 5;
?>
複数の変数を同じ値で初期化したい場合などの書き方です。これは、右から(「$c = 5」から)実行されて $c、$b、$a の順番で「5」が入ります。
まとめ
変数の書式は、左項の変数に右項の値を代入する、という意味合いになります。
代入は、右項から左項に値を移すのではなく、右項のコピーを左項に入れることです。