PHP

on Note

代入を理解する 変数で値を代入する時の挙動は?

変数に値を代入する時、値はどう移り変わるのか。値を代入するとはどういうことなのかなど、代入に関して理解を深めます。

値の代入での挙動は、プログラミングにおいて知っておいた方が良いでしょう。

変数と代入の書式

変数と代入の書式は、左項に変数名を書き、右項には変数に代入する値を書く書き方です。代入演算子「=」で左項と右項を隔てる形で書き、左項に置いた変数に、代入演算子を使って右項の値を代入、という意味合いになります。

$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」が入ります。

まとめ

変数の書式は、左項の変数に右項の値を代入する、という意味合いになります。

代入は、右項から左項に値を移すのではなく、右項のコピーを左項に入れることです。