PHPはWeb開発の現場で長く愛され続けている言語であり、2026年現在もその進化は止まりません。
プログラミングの基本となる「演算子」を正しく理解することは、効率的でバグの少ないコードを書くための第一歩です。
この記事では、PHPの最新バージョンに基づいた演算子の種類と使い方を、初心者から中級者の方に向けて詳しく解説していきます。
演算子の優先順位や結合規則、また実務で役立つテクニックについても網羅していますので、ぜひ参考にしてください。
PHPの演算子とは
演算子とは、値(オペランド)に対して何らかの操作を行うための記号やキーワードを指します。
例えば、「1 + 2」という式の「+」が演算子であり、数値の足し算という命令をコンピュータに伝えます。
PHPには多くの演算子が用意されており、計算だけでなく、文字列の結合や値の比較、論理判断など多岐にわたります。
最新のPHPでは、より簡潔に記述できる演算子も追加されており、コードの可読性を高めることができます。
算術演算子
算術演算子は、数学的な計算を行うための基本的な演算子です。
加減乗除といった基本的な四則演算に加えて、剰余(余り)や累乗を計算するものがあります。
| 演算子 | 名称 | 例 | 結果 |
|---|---|---|---|
| + | 加算 | $a + $b | $a と $b の和 |
| – | 減算 | $a – $b | $a と $b の差 |
| * | 乗算 | $a * $b | $a と $b の積 |
| / | 除算 | $a / $b | $a と $b の商 |
| % | 剰余 | $a % $b | $a を $b で割った余り |
| ** | 累乗 | $a ** $b | $a の $b 乗 |
算術演算子を使用する際の注意点として、除算における「ゼロ除算」に気をつける必要があります。
PHP 8.0以降では、0で除算を行うと DivisionByZeroError という致命的なエラーが発生します。
また、剰余演算子(%)はオペランドを整数に変換してから計算を行うという特徴があります。
<?php
$a = 10;
$b = 3;
echo $a + $b; // 13
echo $a % $b; // 1
echo $a ** $b; // 1000
?>
13
1
1000
代入演算子
代入演算子は、変数に値を格納するために使用されます。
最も基本的なものは「=」ですが、算術演算子と組み合わせた「複合代入演算子」も頻繁に利用されます。
| 演算子 | 例 | 等価な式 |
|---|---|---|
| = | $a = 5 | なし |
| += | $a += 5 | $a = $a + 5 |
| -= | $a -= 5 | $a = $a – 5 |
| *= | $a *= 5 | $a = $a * 5 |
| /= | $a /= 5 | $a = $a / 5 |
| .= | $a .= “str” | $a = $a . “str” |
複合代入演算子を使用することで、コードを短く記述でき、タイポの防止にもつながります。
特に文字列の連結代入(.=)は、HTMLの組み立てや長いメッセージの作成によく使われます。
比較演算子
比較演算子は、2つの値を比較し、その結果を真偽値(true または false)で返します。
条件分岐(if文)などで多用されるため、正確な挙動を理解しておく必要があります。
等価比較の注意点
PHPには、「==(等しい)」と「===(厳密に等しい)」の2種類の等価演算子があります。
「==」は型が異なっていても、PHPが良しなに型変換を行って比較します。
一方、「===」は型まで含めて一致しているかを確認します。
予期せぬバグを防ぐため、実務では可能な限り === を使用することが推奨されます。
| 演算子 | 名称 | 例 | 説明 |
|---|---|---|---|
| == | 等しい | $a == $b | 値が等しければ true |
| === | 厳密に等しい | $a === $b | 値も型も等しければ true |
| != | 等しくない | $a != $b | 値が等しくなければ true |
| !== | 厳密に等しくない | $a !== $b | 値または型が等しくなければ true |
| < | より小さい | $a < $b | $a が $b より小さければ true |
| > | より大きい | $a > $b | $a が $b より大きければ true |
| <=> | 宇宙船演算子 | $a <=> $b | $aが小さいなら-1、等しいなら0、大きいなら1を返す |
宇宙船演算子(<=>)は、ソート(並び替え)のロジックを記述する際に非常に便利です。
<?php
var_dump(100 == "100"); // true
var_dump(100 === "100"); // false
$numbers = [3, 1, 4];
usort($numbers, function($a, $b) {
return $a <=> $b;
});
// $numbers は [1, 3, 4] になる
?>
bool(true)
bool(false)
論理演算子
論理演算子は、複数の条件を組み合わせたり、条件を反転させたりする場合に使用します。
主に使用されるのは &&(かつ)と ||(または)です。
| 演算子 | 名称 | 例 | 結果 |
|---|---|---|---|
| && | 論理積 (AND) | $a && $b | 両方が true なら true |
| || | 論理和 (OR) | $a || $b | どちらかが true なら true |
| ! | 論理否定 (NOT) | !$a | true なら false、false なら true |
| xor | 排他的論理和 | $a xor $b | どちらか片方だけが true なら true |
PHPには and や or というキーワードも存在しますが、これらは && や || よりも「優先順位が低い」という特徴があります。
一般的なプログラミングでは、意図しない動作を避けるために && と || を使うのが一般的です。
論理演算子は、左側のオペランドの結果によって右側を評価しない「短絡評価(ショートサーキット)」が行われることも覚えておきましょう。
三項演算子と Null 合体演算子
モダンなPHP開発において欠かせないのが、簡潔な条件分岐を可能にする演算子です。
三項演算子 (?:)
三項演算子は、(条件) ? (真の場合の値) : (偽の場合の値) という形式で記述します。
if文を1行で表現できるため、変数への代入などで重宝します。
<?php
$age = 20;
$status = ($age >= 20) ? "大人" : "子供";
echo $status;
?>
大人
Null 合体演算子 (??)
Null 合体演算子は、変数が null であるかどうかをチェックし、null の場合にデフォルト値を返す演算子です。
ユーザー入力やAPIのレスポンスなど、値が存在しない可能性がある場合に非常に有効です。
PHP 7.4からは、代入と組み合わせた ??=(Null 合体代入演算子)も利用可能になりました。
<?php
// $_GET['user'] が存在しない場合は 'guest' を代入
$user = $_GET['user'] ?? 'guest';
$config = [];
$config['theme'] ??= 'dark'; // themeがなければ 'dark' をセット
?>
加算子・減算子(インクリメント・デクリメント)
変数の値を1増やしたり、1減らしたりする操作は、ループ処理などで頻繁に登場します。
これらは、演算子を置く位置によって挙動が異なります。
| 例 | 名称 | 挙動 |
|---|---|---|
| ++$a | 前置加算 | $a を 1 増やしてから $a を返す |
| $a++ | 後置加算 | $a を返してから $a を 1 増やす |
| –$a | 前置減算 | $a を 1 減らしてから $a を返す |
| $a– | 後置減算 | $a を返してから $a を 1 減らす |
初心者のうちは「前置」と「後置」の違いで混乱することが多いため、注意が必要です。
代入式の中でこれらの演算子を使用する場合、評価される順番によって最終的な値が変わる可能性があります。
文字列演算子
PHPで文字列を結合するために使用されるのが、ドット(.)演算子です。
他の言語ではプラス(+)が使われることもありますが、PHPでは「プラスは数値計算専用」となっているため、ドットを使用します。
<?php
$greeting = "Hello";
$name = "PHP";
echo $greeting . " " . $name . "!"; // 文字列の結合
?>
Hello PHP!
配列演算子
配列に対しても専用の演算子が存在します。
特に「+」演算子は、2つの配列を結合するために使われますが、重複するキーがある場合は「左側の配列の値が優先される」という挙動を示します。
これは array_merge() 関数の挙動とは異なるため、用途に合わせて使い分ける必要があります。
| 演算子 | 名称 | 例 | 説明 |
|---|---|---|---|
| + | 結合 | $a + $b | $a と $b の和集合(キーが優先) |
| == | 等しい | $a == $b | 同じキーと値のペアを持てば true |
| === | 同一 | $a === $b | 同じキーと値、順序、型が一致すれば true |
配列の厳密な比較が必要な場合は、順序までチェックする === を使用してください。
型演算子 (instanceof)
オブジェクト指向プログラミングにおいて、特定のクラスから生成されたインスタンスかどうかを判定するために instanceof 演算子が使われます。
この演算子は、インターフェースを実装しているかどうかの確認にも使用できます。
<?php
class User {}
$user = new User();
if ($user instanceof User) {
echo "これは User クラスのインスタンスです。";
}
?>
エラー制御演算子 (@)
PHPには、式の前に @ を付けることで、その式から発生するエラーメッセージを無視する演算子があります。
しかし、2026年現在のモダンな開発において、このエラー制御演算子の使用は推奨されません。
エラーは適切にトラップ(try-catchなど)して処理すべきであり、無視することはデバッグを困難にする大きな要因となります。
PHP 8.0以降では、以前は警告程度だったエラーの多くが致命的なエラーに変更されているため、この演算子の影響範囲も変わっています。
演算子の優先順位と結合規則
複雑な式を書く際、どの演算子が先に計算されるかを知っておくことは非常に重要です。
算数と同じように、掛け算(*)は足し算(+)よりも先に計算されます。
優先順位が同じ演算子が並んでいる場合、左から計算するか右から計算するかを決定するのが「結合規則」です。
優先順位の例
例えば、1 + 2 * 3 は (1 + 2) * 3 ではなく、1 + (2 * 3) と評価されます。
もし計算順序を明示したい場合や、複雑なロジックを読みやすくしたい場合は、必ず括弧 () を使用しましょう。
括弧を使用することで、優先順位に関係なく特定の式を最優先で評価させることができます。
実務で役立つ演算子の選び方
PHPの演算子を使いこなすことで、コードはよりスマートになります。
しかし、あまりにテクニカルな記述を詰め込みすぎると、他の開発者が読んだときに意図が伝わりにくくなる「可読性の低下」を招くことがあります。
可読性を意識した選択
三項演算子のネスト(入れ子)は、非常に読みづらいため避けるべきです。
三項演算子を重ねるくらいであれば、素直に if-else 文や match 式(PHP 8.0以降)を使う方が保守性が高まります。
また、Null 合体演算子(??)は非常に便利ですが、値が「空文字列」や「0」の場合の挙動には注意が必要です。
?? は null または未定義のみを対象とするため、空文字列を判定したい場合は empty() 関数などと組み合わせる必要があります。
PHPの演算子に関するよくある質問
演算子について、開発現場でよく受ける質問とその回答をまとめました。
Q1. 「==」と「===」の使い分けを忘れそうです。
迷ったら ===(厳密な比較)を使ってください。
PHPの自動型変換は非常に強力ですが、時に意図しない判定(”0″ が false になったり、文字列と数値が等しくなったり)を生む原因になります。
Q2. 宇宙船演算子(<=>)はいつ使えばいいですか?
主に配列の並び替えを行う usort() 関数のコールバック内で使用します。
これまでは比較の結果によって 1, 0, -1 を返すための if 文を書いていましたが、宇宙船演算子を使えば1行で記述できます。
Q3. PHP 9(最新版)で新しくなった演算子はありますか?
PHPは毎年バージョンアップが行われていますが、基本的な演算子の体系は安定しています。
新しい型(交差型やDnf型)に関連する内部的な動作最適化は行われていますが、私たちが使う記号そのものが急激に変わることは稀です。
まとめ
PHPの演算子は、プログラミングを行う上での基本中の基本であり、非常に強力なツールです。
算術演算子や代入演算子といった基本的なものから、Null合体演算子や宇宙船演算子のようなモダンなものまで、適切に使い分けることが求められます。
特に比較演算子における === の徹底や、可読性を高めるための括弧 () の活用は、すぐにでも実践できる重要なポイントです。
本記事で紹介した演算子の一覧を参考に、より正確で効率的なPHPコードの記述を目指してください。
演算子の挙動に自信が持てないときは、実際に小さなコードを書いて実行結果を確認してみるのが上達への近道です。
これからもPHPの進化を追いながら、より良いコードを書いていきましょう。
