PHP

on Note

代入演算子と複合代入演算子

代入演算子とは、変数に値を代入する時に用いる演算子「=」(イコール)のことです。このページでは代入の動きにも理解を深めます。

また代入演算子は、算術演算子と組み合わせた使い方もします。これらを組み合わせた複合代入演算子についても知ることができます。

代入演算子

変数に値を代入する時、次のように書きます。

<?php
    $a = 1;
?>

左項の $a という変数に、=(イコール)を使って、右項の値「1」を代入するという文です。この「=」が、値の代入の際に用いる演算子ということで代入演算子と呼ばれます。

複合代入演算子

複合代入演算子は、「複合」という言葉が入っているので、何かと何かが合わさった演算子なんだなとイメージできるかと思います。

複合代入演算子とは、算術演算子(+ や - など)と代入演算子(=)が合わさった演算子です。

代入演算子が合わさっているので変数への代入に関係する演算子なわけですが、変数に対する演算と、変数への代入が合わさった演算子ということになります。

例えば次のような変数定義があったとします。

$a += 1;

算術演算子「+」と代入演算子「=」が合わさった複合代入演算子「+=」を使っています。

「+=」を言葉で言い表すとすれば、「加算して代入する」となります。では上の変数定義全体を言葉にすると、「$a に 1 加算して $a に代入する」となります。つまり$a = $a + 1」と同じことです。

実際の出力結果と合わせて見てみます。

<?php
    $a = 0;
    $a += 1;

    var_dump($a);
?>

1行目は初期化の意味で $a に「0」を代入しています。

2行目で、$a に 1 加算して、加算した値が $a に再び代入されます。

出力結果は次のように「1」となります。

int(1)

元は 0 だった $a に、1 加算した値が再び代入される、つまり $a を再定義した形となりますので、$a の中身が上書きされたことになります。

複合代入演算子の種類

複合代入演算子にはどういうものがあるのか。それぞれどういう演算式になるのかという具体例と、それぞれの演算子をどう捉えれば良いのかという説明もここでは書いています。

+=(プラスとイコール)

算術演算子「+」と代入演算子の複合です。「$a += b」という演算式の場合、「$a = $a + b」と同じ意味になります。(このページでは「b」は数値とする。)

具体例をあげます。

<?php
    $a = 10;
    $a += 5;

    var_dump($a);
?>

出力結果は次のようになります。

int(15)

「10」を代入した $a に、「5」を足して再び $a に代入しますので、$a の中身は「15」となっています。

-=(マイナスとイコール)

算術演算子「-」と代入演算子の複合です。

$a -= b」という演算式の場合、「$a = $a - b」と同じ意味になります。

<?php
    $a = 10;
    $a -= 5;

    var_dump($a);
?>

上のコードの出力結果は次のようになります。

int(5)

「10」を代入した $a から「5」を引いて、その結果を再び $a に代入しています。そしてその中身を出力した結果が「5」というわけです。

*=(アスタリスクとイコール)

算術演算子「*」と代入演算子の複合です。

$a *= b」という演算式の場合、「$a = $a * b」と同じ意味になります。$a に b を掛けて、その結果を再び $a に代入することになります。

<?php
    $a = 10;
    $a *= 5;

    var_dump($a);
?>

出力結果は次のようになります。

int(50)

「10」が入った $a に「5」を掛けて、再び $a に代入しています。

/=(スラッシュとイコール)

算術演算子「/」と代入演算子の複合です。

$a /= b」という演算式の場合、「$a = $a / b」と同じ意味になります。

<?php
    $a = 10;
    $a /= 5;

    var_dump($a);
?>

出力結果は次のようになります。

int(2)

「10」が入った $a を「5」で割って、結果を再び $a に代入しています。

%=(パーセントとイコール)

算術演算子「%」と代入演算子の複合です。

$a %= b」という演算式の場合、「$a = $a % b」と同じ意味になります。

<?php
    $a = 10;
    $a %= 3;

    var_dump($a);
?>

出力結果は次のようになります。

int(1)

「10」が入った $a を、「3」で割った場合の余りの値を再び $a に代入しているので、$a の中身は「1」というわけです。

.=(ピリオドとイコール)

文字列結合演算子「.」と代入演算子の複合です。

$a .= b」という演算式の場合、「$a = $a . b」と同じ意味になります。

<?php
    $a = 10;
    $a .= 5;

    var_dump($a);
?>

出力結果は次のようになります。

string(3) "105"

文字列結合演算子との複合なので、数値の「10」と「5」の演算をするのではなく、「10」と「5」を文字列として、しかも結合をします。よってその結果も文字列になりますし、「10」と「5」を連結した「105」になります。

まとめ

変数に値を代入する際に使用する「=」が代入演算子です。

代入演算子と算術演算子を合わせて使用する複合代入演算子もあります。複合代入演算子の種類と意味は次の通りです。

+=(プラスとイコール)
$a += b」は「$a = $a + b」と同じ意味。
$aに bを足して、その結果を再び $aに代入。
-=(マイナスとイコール)
$a -= b」は「$a = $a - b」と同じ意味。
$aから bを引いて、その結果を再び $aに代入。
*=(アスタリスクとイコール)
$a *= b」は「$a = $a * b」と同じ意味。
$aに bを掛けて、その結果を再び $aに代入。
/=(スラッシュとイコール)
$a /= b」は「$a = $a / b」と同じ意味。
$aを bで割って、その結果を再び $aに代入。
%=(パーセントとイコール)
$a %= b」は「$a = $a % b」と同じ意味。
$aを bで割った時の、余りを $aに代入。
.=(ピリオドとイコール)
$a .= b」は「$a = $a . b」と同じ意味。
$aと bを、文字列として結合した結果を再び $aに代入。