PHPの代入演算子について

採用はこちら

PHPの代入演算子とは、変数に値を入れるための演算子です。

もっとも基本的な代入演算子は = です。

$name = '田中';
$age = 30;

このコードでは、$name'田中'$age30 が代入されています。

ここで注意したいのは、PHPにおける = は「等しい」という意味ではないことです。

数学では = を「等しい」という意味で使いますが、PHPでは右側の値を左側の変数に入れるという意味になります。

$a = 10;

これは「$a10 と等しい」という意味ではなく、「$a10 を代入する」という意味です。

PHPでは、変数に値を入れたり、計算結果を保存したり、文字列を追加したりするときに代入演算子を使います。

プログラムを書くうえで非常に基本的な文法なので、PHPを学ぶなら必ず理解しておきたい内容です。

目次

基本の代入演算子「=」

右辺の値を左辺に代入する

PHPの基本的な代入は、次のように書きます。

$変数名 = 値;

例を見てみましょう。

$message = 'こんにちは';
$count = 5;
$is_active = true;

この場合、それぞれの変数には次の値が入ります。

$message  // 'こんにちは'
$count    // 5
$is_active // true

PHPの代入では、右側の値や式が先に評価され、その結果が左側の変数に入ると考えるとわかりやすいです。

$total = 1000 + 500;

echo $total;

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

1500

この場合、まず 1000 + 500 が計算され、その結果である 1500$total に代入されます。

文字列・数値・真偽値を代入できる

PHPでは、さまざまな種類の値を変数に代入できます。

$name = '佐藤';
$price = 1200;
$rate = 1.1;
$is_member = false;

それぞれ、次のような値です。

値の種類
'佐藤'文字列
1200整数
1.1小数
false真偽値

PHPでは変数を使うときに、変数名の前に $ を付けます。

$user_name = '山田';
echo $user_name;

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

山田

代入式そのものも値を持つ

PHPでは、代入式そのものも値を持ちます。

たとえば、次のような書き方ができます。

$a = ($b = 4) + 5;

echo $a;
echo $b;

この場合、$b = 4 の結果が 4 として扱われるため、$a には 4 + 5 の結果である 9 が代入されます。

$a // 9
$b // 4

ただし、このような書き方は少し読みにくくなります。

初心者向けのコードや、保守しやすいコードを書く場合は、次のように分けて書く方がわかりやすいです。

$b = 4;
$a = $b + 5;

PHPでは短く書けることも大切ですが、実務では読みやすさも非常に重要です。

複合代入演算子とは

計算しながら代入できる演算子

複合代入演算子とは、計算や文字列連結を行い、その結果を同じ変数に代入する演算子です。

たとえば、次のコードを見てください。

$count = 10;
$count = $count + 5;

このコードでは、$count5 を足して、その結果をもう一度 $count に代入しています。

これと同じ意味を、複合代入演算子を使って次のように書けます。

$count = 10;
$count += 5;

$count += 5; は、次のコードとほぼ同じ意味です。

$count = $count + 5;

つまり、+= は「加算して代入する」という意味です。

複合代入演算子を使うメリット

複合代入演算子を使うと、コードを短く書けます。

$total = $total + 1000;

このようなコードは、次のように書けます。

$total += 1000;

また、文字列を追加する場合も同じです。

$message = $message . '追加の文章';

これは、次のように書けます。

$message .= '追加の文章';

複合代入演算子は、合計金額の計算、カウント処理、文字列の追加、配列の結合などでよく使われます。

PHPの主な代入演算子一覧

よく使う代入演算子

PHPでよく使う代入演算子は、次の通りです。

演算子名称意味
=代入右辺の値を左辺に代入する$a = 10
+=加算代入足した結果を代入する$a += 5
-=減算代入引いた結果を代入する$a -= 5
*=乗算代入掛けた結果を代入する$a *= 2
/=除算代入割った結果を代入する$a /= 2
%=剰余代入割った余りを代入する$a %= 3
**=累乗代入累乗した結果を代入する$a **= 2
.=文字列連結代入文字列を連結して代入する$text .= 'です'
??=null合体代入未定義またはnullの場合だけ代入する$name ??= 'ゲスト'

これらの中でも、初心者が最初に覚えたいのは =+=-=.=??= です。

特にPHPでWebサイト制作やWordPressカスタマイズを行う場合、文字列連結代入の .= や、初期値設定に使える ??= はよく見かけます。

ビット演算に関する代入演算子

PHPには、ビット演算に関する代入演算子もあります。

演算子意味
&=ビットANDして代入する
`=`
^=ビットXORして代入する
<<=左シフトして代入する
>>=右シフトして代入する

通常のWeb制作やPHP初心者向けの学習では、これらの使用頻度はあまり高くありません。

まずは、基本の = や、計算に使う +=、文字列をつなげる .= を優先して覚えるとよいでしょう。

加算代入演算子「+=」

数値を足して代入する

+= は、現在の値に右側の値を足し、その結果を同じ変数に代入する演算子です。

$count = 10;
$count += 5;

echo $count;

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

15

これは、次のコードと同じ意味です。

$count = 10;
$count = $count + 5;

$count5 を足して、結果の 15 を再び $count に代入しています。

合計金額の計算に使える

+= は、合計金額を計算するときによく使われます。

$total = 0;

$total += 1000;
$total += 2500;
$total += 800;

echo $total;

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

4300

このように、複数の値を順番に足していく処理では、+= を使うとコードがすっきりします。

ショッピングカートの合計金額、スコアの加算、アクセス数の集計などでもよく使われます。

減算代入演算子「-=」

数値を引いて代入する

-= は、現在の値から右側の値を引き、その結果を同じ変数に代入する演算子です。

$stock = 20;
$stock -= 3;

echo $stock;

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

17

これは、次のコードと同じ意味です。

$stock = $stock - 3;

在庫数やポイントの計算に使える

-= は、在庫数やポイント残高などを減らす処理でよく使われます。

$point = 1000;
$point -= 300;

echo $point;

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

700

たとえば、ECサイトで商品が購入されたときに在庫数を減らす処理や、ポイント利用後の残高を計算する処理で使えます。

$stock = 50;
$order_quantity = 2;

$stock -= $order_quantity;

echo $stock;

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

48

乗算代入演算子「*=」

数値を掛けて代入する

*= は、現在の値に右側の値を掛け、その結果を同じ変数に代入する演算子です。

$price = 1000;
$price *= 2;

echo $price;

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

2000

これは、次のコードと同じ意味です。

$price = $price * 2;

税率や倍率の計算に使える

*= は、倍率をかける処理で使えます。

$price = 1000;
$price *= 1.1;

echo $price;

出力結果は、多くの場合、次のようになります。

1100

税込価格の計算や、割増料金の計算などに使えます。

ただし、金額計算で小数を扱う場合は注意が必要です。

小数を使った計算では、処理内容によって誤差が出ることがあります。

実務で金額を扱う場合は、必要に応じて round() などで丸め処理を行うと安全です。

$price = 1000;
$tax_rate = 1.1;

$tax_included = (int) round($price * $tax_rate);

echo $tax_included;

除算代入演算子「/=」

数値を割って代入する

/= は、現在の値を右側の値で割り、その結果を同じ変数に代入する演算子です。

$total = 3000;
$total /= 3;

echo $total;

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

1000

これは、次のコードと同じ意味です。

$total = $total / 3;

0で割らないように注意する

除算代入演算子を使うときは、右側の値が 0 にならないように注意が必要です。

$num = 10;
$num /= 0;

このように0で割ろうとすると、エラーや例外の原因になります。

実務では、割る前に0ではないかを確認しておくと安全です。

$total = 3000;
$count = 0;

if ($count !== 0) {
    $average = $total / $count;
} else {
    $average = 0;
}

echo $average;

平均値や単価を計算するときは、分母が0になる可能性を考慮しましょう。

剰余代入演算子「%=」

割った余りを代入する

%= は、割り算の余りを求め、その結果を同じ変数に代入する演算子です。

$num = 10;
$num %= 3;

echo $num;

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

1

これは、次のコードと同じ意味です。

$num = 10 % 3;

10 ÷ 3 は、商が 3、余りが 1 です。

そのため、$num には 1 が代入されます。

偶数・奇数の判定にも使われる

剰余演算子 % は、偶数・奇数の判定でよく使われます。

$number = 7;

if ($number % 2 === 0) {
    echo '偶数です';
} else {
    echo '奇数です';
}

この場合、72 で割った余りは 1 なので、出力結果は次のようになります。

奇数です

ただし、判定だけを行う場合は、%= ではなく % を使うことが多いです。

%= は、余りの結果を同じ変数に入れ直したい場合に使います。

累乗代入演算子「**=」

累乗した結果を代入する

**= は、累乗した結果を同じ変数に代入する演算子です。

$num = 3;
$num **= 2;

echo $num;

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

9

これは、次のコードと同じ意味です。

$num = $num ** 2;

つまり、32 乗なので、結果は 9 になります。

累乗計算を短く書ける

たとえば、次のような計算にも使えます。

$base = 2;
$base **= 3;

echo $base;

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

8

23 乗なので、8 になります。

通常のWeb制作では頻繁に使う演算子ではありませんが、計算処理を行う場合には覚えておくと便利です。

文字列連結代入演算子「.=」

文字列を追加して代入する

PHPでは、文字列を連結するときに . を使います。

$full_name = '山田' . '太郎';

echo $full_name;

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

山田太郎

すでにある文字列に、新しい文字列を追加したい場合は .= を使います。

$message = 'こんにちは';
$message .= '、田中さん';

echo $message;

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

こんにちは、田中さん

これは、次のコードと同じ意味です。

$message = $message . '、田中さん';

HTMLや文章を組み立てるときに使える

.= は、文章やHTMLを少しずつ組み立てるときにも使えます。

$html = '';

$html .= '<ul>';
$html .= '<li>りんご</li>';
$html .= '<li>みかん</li>';
$html .= '<li>バナナ</li>';
$html .= '</ul>';

echo $html;

このように、空の文字列に少しずつHTMLを追加していくことができます。

ただし、ユーザーが入力した内容をHTMLに出力する場合は注意が必要です。

$name = '<script>alert("XSS")</script>';

echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8');

ユーザー入力をそのまま出力すると、XSSなどのセキュリティリスクにつながる場合があります。

必要に応じて htmlspecialchars() でエスケープ処理を行いましょう。

文字列連結に「+」は使わない

JavaScriptなどに慣れていると、文字列連結に + を使いたくなるかもしれません。

しかし、PHPでは文字列連結に + ではなく . を使います。

間違った例です。

$name = '田中';
$message = 'こんにちは' + $name;

正しい例です。

$name = '田中';
$message = 'こんにちは' . $name;

追加して代入する場合は、.= を使います。

$message = 'こんにちは';
$message .= '、田中さん';

echo $message;

PHPにおいて + は数値の加算に使う演算子です。

文字列をつなげる場合は、必ず . または .= を使いましょう。

null合体代入演算子「??=」

未定義またはnullの場合だけ代入する

??= は、左側の変数が未定義またはnullの場合だけ、右側の値を代入する演算子です。

$username ??= 'ゲスト';

echo $username;

もし $username が未定義、または null であれば、'ゲスト' が代入されます。

一方で、すでに値が入っている場合は上書きされません。

$username = '佐藤';

$username ??= 'ゲスト';

echo $username;

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

佐藤

$username にはすでに '佐藤' が入っているため、'ゲスト' には変更されません。

issetを使った処理に近い

??= は、次のような処理に近い書き方です。

if (!isset($username)) {
    $username = 'ゲスト';
}

つまり、変数が存在しない、または null の場合だけ初期値を入れる処理を短く書けます。

$options = [];

$options['limit'] ??= 10;
$options['sort'] ??= 'desc';

print_r($options);

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

Array
(
    [limit] => 10
    [sort] => desc
)

配列の設定値に初期値を入れる処理などで便利です。

PHP 7.4以降で使える

??= は、PHP 7.4以降で使える演算子です。

そのため、古いPHP環境では使えない場合があります。

特にWordPressサイトやレンタルサーバーを使っている環境では、PHPのバージョンが古いままになっていることもあります。

??= を使う場合は、サーバーのPHPバージョンを確認しておくと安心です。

古いPHP環境にも対応したい場合は、次のように isset() を使って書く方法もあります。

if (!isset($username)) {
    $username = 'ゲスト';
}

配列で使う代入演算子

配列のキーに値を代入する

PHPでは、配列のキーに対して値を代入できます。

$user = [];

$user['name'] = '田中';
$user['age'] = 30;
$user['email'] = 'tanaka@example.com';

print_r($user);

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

Array
(
    [name] => 田中
    [age] => 30
    [email] => tanaka@example.com
)

このように、配列のキーを指定して値を入れると、連想配列を作れます。

配列の末尾に要素を追加する

配列の末尾に要素を追加したい場合は、次のように書けます。

$fruits = [];

$fruits[] = 'りんご';
$fruits[] = 'みかん';
$fruits[] = 'バナナ';

print_r($fruits);

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

Array
(
    [0] => りんご
    [1] => みかん
    [2] => バナナ
)

$fruits[] = 'りんご'; のように書くと、配列の末尾に新しい要素を追加できます。

配列に対する「+=」は配列結合になる

数値に対する += は加算代入ですが、配列に対して使うと配列の結合として動作します。

$a = ['name' => '田中'];
$b = ['age' => 30];

$a += $b;

print_r($a);

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

Array
(
    [name] => 田中
    [age] => 30
)

このように、右側の配列の要素が左側の配列に追加されます。

同じキーがある場合は左側が優先される

配列に対して += を使う場合、同じキーがあると左側の配列の値が優先されます。

$a = ['name' => '田中', 'age' => 25];
$b = ['age' => 30, 'email' => 'test@example.com'];

$a += $b;

print_r($a);

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

Array
(
    [name] => 田中
    [age] => 25
    [email] => test@example.com
)

age$a 側にすでに存在しているため、$bage => 30 では上書きされません。

これは array_merge() とは挙動が異なります。

配列を結合するときは、+=array_merge() の違いに注意しましょう。

参照代入「=&」

同じ値を参照するようにする

PHPには、通常の代入とは別に、参照代入があります。

参照代入では =& を使います。

$a = 10;
$b =& $a;

$b = 20;

echo $a;

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

20

通常の代入であれば、$b を変更しても $a は変わりません。

しかし、参照代入を使うと、$a$b が同じ値を参照するようになります。

そのため、$b を変更すると $a の値も変わります。

通常の代入との違い

通常の代入では、片方を変更しても、もう片方が自動的に変わるわけではありません。

$a = 10;
$b = $a;

$b = 20;

echo $a;

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

10

一方、参照代入では次のようになります。

$a = 10;
$b =& $a;

$b = 20;

echo $a;

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

20

参照代入は便利な場面もありますが、意図しない値の変更につながることがあります。

初心者のうちは、必要な理由が明確な場合だけ使うのがおすすめです。

通常の代入と値の扱い

通常の代入では片方を変更してももう片方は変わらない

通常の変数同士の代入では、片方を変更しても、もう片方の値が自動的に変わるわけではありません。

$a = 10;
$b = $a;

$b = 20;

echo $a;
echo $b;

この場合、出力される値は次のようになります。

10
20

$b = $a; としても、その後に $b を変更しただけでは $a は変わりません。

配列でも基本的な考え方は同じ

配列でも、通常の代入では片方を変更しても、もう片方が自動的に変わるわけではありません。

$array1 = [1, 2, 3];
$array2 = $array1;

$array2[] = 4;

print_r($array1);
print_r($array2);

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

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)

$array24 を追加しても、$array1 はそのままです。

PHP内部では効率化のためにcopy-on-writeという仕組みが使われますが、通常のコードを書くうえでは「片方を変更しても、もう片方は変わらない」と理解して問題ありません。

代入演算子と比較演算子の違い

「=」は代入に使う

PHP初心者が間違えやすいのが、====== の違いです。

= は代入に使います。

$a = 10;

これは、$a10 を入れる処理です。

「==」は値が等しいか比較する

== は、値が等しいかどうかを比較する演算子です。

$a = '10';

var_dump($a == 10);

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

bool(true)

$a は文字列の '10' ですが、10 は整数です。

== は型を厳密に見ずに比較するため、この場合は true になります。

「===」は値と型が等しいか比較する

=== は、値だけでなく型も含めて比較する演算子です。

$a = '10';

var_dump($a === 10);

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

bool(false)

文字列の '10' と整数の 10 は、値としては似ていますが型が異なります。

そのため、=== では false になります。

実務では、意図しない型変換を避けるために、条件分岐では === を使うことが多いです。

if文の中で代入してしまうミスに注意

比較のつもりで「=」を書かない

PHPでは、if文の中でも代入を書くことができます。

そのため、比較のつもりで = を書いてしまうと、意図しない動きになることがあります。

間違った例です。

$status = 'inactive';

if ($status = 'active') {
    echo '有効です';
}

このコードは、$status'active' かどうかを比較しているわけではありません。

実際には、if文の中で次の代入が行われています。

$status = 'active'

その結果、条件が成立してしまいます。

比較するときは「===」を使う

比較したい場合は、= ではなく === を使います。

$status = 'inactive';

if ($status === 'active') {
    echo '有効です';
} else {
    echo '無効です';
}

この場合、$status'inactive' なので、出力結果は次のようになります。

無効です

= は代入、=== は比較です。

この違いを理解しておくと、PHPの条件分岐でのミスを減らせます。

代入演算子の優先順位

計算は優先順位に従って処理される

PHPの演算子には優先順位があります。

たとえば、次のコードを見てください。

$a = 10 + 5 * 2;

echo $a;

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

20

これは、10 + 5 が先に計算されるのではなく、5 * 2 が先に計算されるためです。

$a = 10 + (5 * 2);

という意味になります。

わかりにくい場合は括弧を使う

計算の順番がわかりにくい場合は、括弧を使うと読みやすくなります。

$a = (10 + 5) * 2;

echo $a;

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

30

括弧を使うことで、どの計算を先に行うのかが明確になります。

代入演算子や複合代入演算子を使う場合も、複雑な式にしすぎると読みにくくなります。

実務では、無理に1行で書かず、必要に応じて処理を分けるのがおすすめです。

代入演算子の実用例

カートの合計金額を計算する

代入演算子は、ECサイトのカート金額を計算するような場面で使えます。

$total = 0;

$total += 1200;
$total += 800;
$total += 2500;

echo '合計金額は' . $total . '円です';

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

合計金額は4500円です

+= を使うことで、金額を順番に足していく処理をわかりやすく書けます。

メッセージ文を組み立てる

.= を使うと、メッセージ文を少しずつ追加できます。

$message = '';

$message .= 'ご注文ありがとうございます。';
$message .= '発送準備が完了しました。';
$message .= '到着までしばらくお待ちください。';

echo $message;

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

ご注文ありがとうございます。発送準備が完了しました。到着までしばらくお待ちください。

メール本文やHTMLの一部を組み立てるときにも使えます。

設定値に初期値を入れる

??= を使うと、値がない場合だけ初期値を入れられます。

$config = [];

$config['items_per_page'] ??= 20;
$config['sort_order'] ??= 'desc';

print_r($config);

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

Array
(
    [items_per_page] => 20
    [sort_order] => desc
)

すでに値が入っている場合は上書きされないため、設定値の初期化に便利です。

カウント処理を書く

アクセス数や処理回数を数える場合にも、代入演算子を使えます。

$count = 0;

$count += 1;
$count += 1;
$count += 1;

echo $count;

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

3

1ずつ増やすだけであれば、インクリメント演算子を使うこともあります。

$count++;

ただし、+= を使うと、1以外の数値を加算したい場合にも対応しやすくなります。

$count += 5;

PHP初心者がまず覚えるべき代入演算子

最初は使用頻度の高いものから覚える

PHPの代入演算子は多くありますが、最初からすべてを完璧に覚える必要はありません。

まずは、次の演算子を優先して覚えましょう。

演算子用途優先度
=値を代入する
+=数値を加算して代入する
-=数値を減算して代入する
.=文字列を連結して代入する
??=値がない場合だけ初期値を代入する

特に = は、PHPの変数操作で必ず使います。

また、.= はPHPで文字列を組み立てるときによく使うため、早めに覚えておくとコードが読みやすくなります。

WordPressやWeb制作でよく見る演算子

WordPressのテーマ制作やPHPを使ったWeb制作では、次のような演算子を見かけることがあります。

$title = '記事タイトル';
$html .= '<div class="post">';
$count += 1;
$options['limit'] ??= 10;

このように、PHPでは変数に値を入れたり、HTMLを組み立てたり、カウントしたり、初期値を設定したりする場面で代入演算子が使われます。

最初は難しく見えるかもしれませんが、用途ごとに整理して覚えると理解しやすくなります。

代入演算子でよくあるミス

「=」と「===」を間違える

もっとも多いミスのひとつが、比較のつもりで = を使ってしまうことです。

間違った例です。

if ($role = 'admin') {
    echo '管理者です';
}

正しい例です。

if ($role === 'admin') {
    echo '管理者です';
}

= は代入、=== は比較です。

if文の条件では、比較したいのか、代入したいのかをしっかり確認しましょう。

文字列連結で「+」を使う

PHPでは、文字列連結に + を使いません。

間違った例です。

$name = '田中';
$message = 'こんにちは' + $name;

正しい例です。

$name = '田中';
$message = 'こんにちは' . $name;

PHPの文字列連結は . です。

追加しながら代入する場合は .= を使います。

$message = 'こんにちは';
$message .= '、田中さん';

null合体代入と通常の代入を混同する

=??= は、動きが異なります。

= は、右側の値で必ず上書きします。

$name = '佐藤';
$name = 'ゲスト';

echo $name;

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

ゲスト

一方、??= は、左側が未定義またはnullの場合だけ代入します。

$name = '佐藤';
$name ??= 'ゲスト';

echo $name;

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

佐藤

すでに値が入っている場合は上書きされません。

初期値を入れたいのか、必ず値を上書きしたいのかによって、使う演算子を選びましょう。

参照代入を不用意に使う

参照代入 =& は、2つの変数が同じ値を参照するようになる特殊な代入です。

$a = 10;
$b =& $a;

$b = 20;

echo $a;

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

20

意図して使えば便利ですが、不用意に使うと、思わぬ場所で値が変わってしまうことがあります。

初心者のうちは、通常の代入 = と参照代入 =& を混同しないようにしましょう。

まとめ

PHPの代入演算子は変数に値を入れるための基本文法

PHPの代入演算子は、変数に値を入れたり、計算結果を保存したり、文字列を追加したりするために使います。

もっとも基本的な代入演算子は = です。

$a = 10;

これは、「$a10 を代入する」という意味です。

= は「等しい」という意味ではないため、比較演算子の ===== と混同しないようにしましょう。

複合代入演算子を使うとコードを短く書ける

+=-=*=/=.= などの複合代入演算子を使うと、計算や文字列連結をしながら代入できます。

$count += 1;
$message .= '追加の文章';

+= は数値の加算、.= は文字列の追加でよく使われます。

また、??= は、変数や配列キーが未定義またはnullの場合だけ初期値を入れられる便利な演算子です。

$username ??= 'ゲスト';

ただし、??= はPHP 7.4以降で使える演算子なので、古い環境では注意が必要です。

PHPの代入演算子を理解すると、変数の扱い、計算処理、文字列連結、配列操作などが読みやすくなります。

まずは =+=.=??= の使い方から覚えていくとよいでしょう。

以上、PHPの代入演算子についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次