「PHPで計算したいけど、どう書けばいいの?」
「==
と===
って何が違うの?」
「&&
とand
はどちらを使えばいい?」
そんな疑問を持つあなたのために、PHPの演算子について、わかりやすく説明します。
演算子とは、計算や比較、条件判定などを行うための記号のことです。
これらを覚えることで、もっと便利で読みやすいプログラムが書けるようになります。
この記事でわかること
- 算術演算子(足し算、引き算など)
- 比較演算子(等しい、大きいなど)
- 論理演算子(かつ、または、でないなど)
- 代入演算子(値を入れる方法)
- 便利な特殊演算子
- 実際のWebサイトでの使用例
算術演算子(計算をしよう)

基本的な計算
数学と同じように、プログラムでも計算ができます。
演算子 | 意味 | 例 | 結果 |
---|---|---|---|
+ | 足し算 | 5 + 3 | 8 |
- | 引き算 | 5 - 3 | 2 |
* | 掛け算 | 5 * 3 | 15 |
/ | 割り算 | 10 / 2 | 5 |
% | 余り | 10 % 3 | 1 |
** | べき乗 | 2 ** 3 | 8 |
実際の使用例
<?php
// ショッピングサイトの計算例
$price = 1000; // 商品価格
$quantity = 3; // 購入数
$taxRate = 0.1; // 消費税率
// 小計
$subtotal = $price * $quantity; // 3000
// 税込み価格
$total = $subtotal * (1 + $taxRate); // 3300
echo "小計: {$subtotal}円";
echo "合計: {$total}円";
?>
余り(%)の便利な使い方
<?php
// 偶数か奇数かを判定
$number = 7;
if ($number % 2 == 0) {
echo "偶数です";
} else {
echo "奇数です"; // こちらが実行される
}
// 3で割り切れるかチェック
$score = 90;
if ($score % 3 == 0) {
echo "3で割り切れます";
}
// 10個ずつ区切って表示
for ($i = 1; $i <= 25; $i++) {
echo $i . " ";
if ($i % 10 == 0) {
echo "<br>"; // 10個ごとに改行
}
}
?>
注意点
ゼロ除算エラー:
<?php
$a = 10;
$b = 0;
// これはエラーになる
// $result = $a / $b; // Fatal error: Division by zero
// 安全な書き方
if ($b != 0) {
$result = $a / $b;
} else {
echo "0で割ることはできません";
}
?>
比較演算子(値を比べよう)

基本的な比較
演算子 | 意味 | 例 | 結果 |
---|---|---|---|
== | 等しい(値のみ) | 5 == "5" | true |
=== | 完全に等しい(値と型) | 5 === "5" | false |
!= | 等しくない | 5 != 3 | true |
!== | 完全に等しくない | 5 !== "5" | true |
> | より大きい | 5 > 3 | true |
< | より小さい | 5 < 3 | false |
>= | 以上 | 5 >= 5 | true |
<= | 以下 | 5 <= 3 | false |
==と===の重要な違い
<?php
// == は値だけを比較(型変換あり)
var_dump(1 == "1"); // bool(true)
var_dump(0 == false); // bool(true)
var_dump("" == false); // bool(true)
var_dump(null == false); // bool(true)
// === は値と型の両方を比較(型変換なし)
var_dump(1 === "1"); // bool(false)
var_dump(0 === false); // bool(false)
var_dump("" === false); // bool(false)
var_dump(null === false); // bool(false)
?>
推奨:基本的には===
を使いましょう
理由:予期しない型変換を避けられるため、バグが少なくなります。
実際の使用例
<?php
// ユーザーのログイン処理
$inputPassword = $_POST['password'] ?? '';
$correctPassword = 'secret123';
if ($inputPassword === $correctPassword) {
echo "ログイン成功";
} else {
echo "パスワードが間違っています";
}
// 年齢制限のチェック
$age = 17;
if ($age >= 18) {
echo "成人向けコンテンツを表示";
} else {
echo "年齢制限により表示できません";
}
// フォームの入力チェック
$email = $_POST['email'] ?? '';
if ($email === '') {
echo "メールアドレスを入力してください";
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "正しいメールアドレスを入力してください";
} else {
echo "メールアドレスは正常です";
}
?>
論理演算子(条件を組み合わせよう)
基本的な論理演算
演算子 | 意味 | 例 | 説明 |
---|---|---|---|
&& | かつ(AND) | $a && $b | 両方が真なら真 |
|| | または(OR) | $a || $b | どちらかが真なら真 |
! | でない(NOT) | !$a | 真なら偽、偽なら真 |
and | かつ(低優先度) | $a and $b | && と同じだが優先度が低い |
or | または(低優先度) | $a or $b | || と同じだが優先度が低い |
実際の使用例
<?php
// 会員限定コンテンツの表示条件
$isLoggedIn = true; // ログイン済み
$isPremium = false; // プレミアム会員ではない
if ($isLoggedIn && $isPremium) {
echo "プレミアムコンテンツを表示";
} elseif ($isLoggedIn) {
echo "通常会員コンテンツを表示";
} else {
echo "ログインしてください";
}
// 営業時間の判定
$hour = 14; // 午後2時
if ($hour >= 9 && $hour < 18) {
echo "営業中です";
} else {
echo "営業時間外です";
}
// 休日の判定
$dayOfWeek = 'Saturday';
if ($dayOfWeek === 'Saturday' || $dayOfWeek === 'Sunday') {
echo "休日です";
} else {
echo "平日です";
}
?>
NOT演算子(!)の使い方
<?php
$isActive = false;
// 否定の判定
if (!$isActive) {
echo "アクティブではありません";
}
// 空でない場合の判定
$name = "";
if (!empty($name)) {
echo "名前: $name";
} else {
echo "名前が入力されていません";
}
// 配列に要素があるかチェック
$items = [];
if (!empty($items)) {
echo "商品があります";
} else {
echo "商品がありません";
}
?>
ショートサーキット評価
PHPの論理演算子は「ショートサーキット評価」を行います。
<?php
// &&の場合:左が偽なら、右は評価されない
$a = false;
$b = true;
if ($a && someFunction()) {
// someFunction()は実行されない($aがfalseなので)
}
// ||の場合:左が真なら、右は評価されない
$c = true;
$d = false;
if ($c || someFunction()) {
// someFunction()は実行されない($cがtrueなので)
echo "実行されます";
}
?>
代入演算子(値を効率的に更新しよう)

基本的な代入
<?php
$x = 10; // 基本的な代入
$y = $x; // 変数の値をコピー
$z = $x + $y; // 計算結果を代入
?>
複合代入演算子
演算子 | 同じ意味 | 例 |
---|---|---|
+= | $a = $a + $b | $a += 5 |
-= | $a = $a - $b | $a -= 3 |
*= | $a = $a * $b | $a *= 2 |
/= | $a = $a / $b | $a /= 4 |
%= | $a = $a % $b | $a %= 3 |
.= | $a = $a . $b | $a .= "追加" |
実際の使用例
<?php
// カウンターの更新
$clickCount = 0;
$clickCount += 1; // $clickCount = $clickCount + 1; と同じ
echo "クリック数: $clickCount";
// 割引計算
$price = 1000;
$price *= 0.9; // 10%割引
echo "割引後価格: $price円";
// 文字列の連結
$message = "こんにちは";
$message .= "、世界!"; // $message = $message . "、世界!"; と同じ
echo $message; // "こんにちは、世界!"
// ショッピングカートの商品数
$cartItems = 2;
$cartItems += 3; // 3個追加
echo "カート内商品数: $cartItems個";
?>
インクリメント・デクリメント
<?php
$counter = 5;
// 前置インクリメント(先に1を足す)
echo ++$counter; // 6
// 後置インクリメント(後で1を足す)
echo $counter++; // 6(表示後に7になる)
echo $counter; // 7
// 前置デクリメント(先に1を引く)
echo --$counter; // 6
// 後置デクリメント(後で1を引く)
echo $counter--; // 6(表示後に5になる)
echo $counter; // 5
?>
実用例:
<?php
// ページ番号の操作
$page = 1;
$nextPage = $page + 1; // 2
$page++; // pageは2になる
// ループでの使用
for ($i = 0; $i < 10; $i++) {
echo "ループ回数: $i<br>";
}
?>
特殊な演算子(便利な書き方)

三項演算子(条件演算子)
基本形: 条件 ? 真の場合の値 : 偽の場合の値
<?php
// 基本的な使い方
$score = 75;
$result = ($score >= 60) ? "合格" : "不合格";
echo $result; // "合格"
// if文との比較
// 三項演算子版
$status = ($isLoggedIn) ? "ログイン中" : "未ログイン";
// if文版(同じ結果)
if ($isLoggedIn) {
$status = "ログイン中";
} else {
$status = "未ログイン";
}
?>
実用例:
<?php
// HTMLクラス名の切り替え
$isActive = true;
$cssClass = $isActive ? 'active' : 'inactive';
echo "<div class='$cssClass'>コンテンツ</div>";
// 価格表示
$price = 0;
$priceText = ($price > 0) ? "{$price}円" : "無料";
echo $priceText;
// 配列の要素数によるメッセージ
$items = ['apple', 'banana'];
$message = (count($items) > 0) ? count($items) . "個の商品があります" : "商品がありません";
echo $message;
?>
NULL合体演算子(??)
PHP 7.0以降で使用可能
<?php
// 基本的な使い方
$username = $_POST['username'] ?? 'ゲスト';
// $_POST['username']が存在して、nullでなければその値、そうでなければ'ゲスト'
// 従来の書き方との比較
// NULL合体演算子版
$name = $_GET['name'] ?? 'デフォルト名';
// 従来版(同じ結果)
$name = isset($_GET['name']) ? $_GET['name'] : 'デフォルト名';
?>
実用例:
<?php
// 設定値のデフォルト
$pageSize = $_GET['per_page'] ?? 10;
$sortOrder = $_GET['sort'] ?? 'asc';
// ユーザー情報の表示
$user = [
'name' => 'John',
'email' => 'john@example.com'
// 'phone'は設定されていない
];
echo "名前: " . ($user['name'] ?? '未設定') . "<br>";
echo "電話: " . ($user['phone'] ?? '未登録') . "<br>";
// 連鎖的な使用
$config = $_ENV['CONFIG'] ?? $_POST['config'] ?? 'default.conf';
?>
NULL合体代入演算子(??=)
PHP 7.4以降で使用可能
<?php
// 値が存在しない場合のみ代入
$options = [];
$options['theme'] ??= 'default'; // 'default'が代入される
$options['theme'] ??= 'dark'; // 既に値があるので何もしない
echo $options['theme']; // 'default'
// 実用例:設定の初期化
$userSettings['notifications'] ??= true;
$userSettings['language'] ??= 'ja';
$userSettings['timezone'] ??= 'Asia/Tokyo';
?>
スペースシップ演算子(<=>)
PHP 7.0以降で使用可能
<?php
// 比較結果を-1, 0, 1で返す
echo 1 <=> 2; // -1 (左が小さい)
echo 2 <=> 2; // 0 (同じ)
echo 3 <=> 2; // 1 (左が大きい)
// 配列のソートで使用
$users = [
['name' => 'Alice', 'age' => 25],
['name' => 'Bob', 'age' => 30],
['name' => 'Charlie', 'age' => 20]
];
// 年齢でソート
usort($users, function($a, $b) {
return $a['age'] <=> $b['age'];
});
// 結果:Charlie(20), Alice(25), Bob(30)の順
?>
演算子の優先順位
重要な優先順位
優先度 | 演算子 | 例 |
---|---|---|
高 | () | ($a + $b) * $c |
↓ | ! | !$flag |
↓ | * , / , % | $a * $b / $c |
↓ | + , - | $a + $b - $c |
↓ | < , <= , > , >= | $a < $b |
↓ | == , === , != , !== | $a == $b |
↓ | && | $a && $b |
↓ | || | $a || $b |
↓ | ? : | $a ? $b : $c |
低 | = , += , -= | $a = $b |
括弧を使った明確な書き方
<?php
// 優先順位が曖昧な場合は括弧を使う
$result = ($a + $b) * ($c - $d);
// 複雑な条件式
if (($age >= 18 && $hasLicense) || $isSpecialCase) {
echo "運転可能";
}
// 計算の順序を明確にする
$tax = ($price * $quantity) * $taxRate;
?>
文字列演算子

文字列の結合
<?php
// 結合演算子(.)
$firstName = "山田";
$lastName = "太郎";
$fullName = $firstName . $lastName; // "山田太郎"
// 結合代入演算子(.=)
$message = "こんにちは";
$message .= "、";
$message .= $fullName;
$message .= "さん";
echo $message; // "こんにちは、山田太郎さん"
?>
実用的な例
<?php
// HTMLタグの生成
$id = "user-123";
$class = "user-card active";
$name = "田中花子";
$html = '<div id="' . $id . '" class="' . $class . '">';
$html .= '<h3>' . $name . '</h3>';
$html .= '</div>';
echo $html;
// CSVデータの作成
$data = ["商品A", "1000", "10"];
$csvLine = implode(",", $data); // "商品A,1000,10"
// URLの構築
$baseUrl = "https://example.com";
$path = "/api/users";
$params = "?page=1&limit=10";
$fullUrl = $baseUrl . $path . $params;
echo $fullUrl; // "https://example.com/api/users?page=1&limit=10"
?>
実践的な使用例
ユーザー認証システム
<?php
function authenticateUser($username, $password) {
$validUsers = [
'admin' => 'secret123',
'user1' => 'password456'
];
// ユーザー名の存在確認と パスワード照合
if (isset($validUsers[$username]) && $validUsers[$username] === $password) {
return true;
}
return false;
}
// 使用例
$inputUser = $_POST['username'] ?? '';
$inputPass = $_POST['password'] ?? '';
if (authenticateUser($inputUser, $inputPass)) {
$_SESSION['logged_in'] = true;
$_SESSION['username'] = $inputUser;
echo "ログイン成功";
} else {
echo "ユーザー名またはパスワードが間違っています";
}
?>
ショッピングカートシステム
<?php
class ShoppingCart {
private $items = [];
private $taxRate = 0.1; // 10%の消費税
public function addItem($productId, $price, $quantity = 1) {
if (isset($this->items[$productId])) {
$this->items[$productId]['quantity'] += $quantity;
} else {
$this->items[$productId] = [
'price' => $price,
'quantity' => $quantity
];
}
}
public function getTotalAmount() {
$subtotal = 0;
foreach ($this->items as $item) {
$subtotal += $item['price'] * $item['quantity'];
}
$tax = $subtotal * $this->taxRate;
$total = $subtotal + $tax;
return [
'subtotal' => $subtotal,
'tax' => $tax,
'total' => $total
];
}
public function hasDiscount($amount) {
return $amount >= 5000; // 5000円以上で割引対象
}
}
// 使用例
$cart = new ShoppingCart();
$cart->addItem('product1', 1000, 2); // 1000円の商品を2個
$cart->addItem('product2', 1500, 1); // 1500円の商品を1個
$amounts = $cart->getTotalAmount();
$hasDiscount = $cart->hasDiscount($amounts['total']);
echo "小計: " . number_format($amounts['subtotal']) . "円<br>";
echo "税額: " . number_format($amounts['tax']) . "円<br>";
echo "合計: " . number_format($amounts['total']) . "円<br>";
echo ($hasDiscount ? "割引対象です" : "割引対象外です");
?>
フォームバリデーション
<?php
function validateForm($data) {
$errors = [];
// 名前のチェック
$name = trim($data['name'] ?? '');
if ($name === '') {
$errors['name'] = '名前を入力してください';
} elseif (strlen($name) > 50) {
$errors['name'] = '名前は50文字以内で入力してください';
}
// メールアドレスのチェック
$email = trim($data['email'] ?? '');
if ($email === '') {
$errors['email'] = 'メールアドレスを入力してください';
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors['email'] = '正しいメールアドレスを入力してください';
}
// 年齢のチェック
$age = $data['age'] ?? 0;
if (!is_numeric($age) || $age < 0 || $age > 120) {
$errors['age'] = '正しい年齢を入力してください';
}
// パスワードのチェック
$password = $data['password'] ?? '';
if (strlen($password) < 8) {
$errors['password'] = 'パスワードは8文字以上で入力してください';
} elseif (!preg_match('/[A-Za-z]/', $password) || !preg_match('/[0-9]/', $password)) {
$errors['password'] = 'パスワードは英字と数字を含めてください';
}
return $errors;
}
// 使用例
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$errors = validateForm($_POST);
if (empty($errors)) {
echo "フォームの入力が正常です!";
// データベースに保存などの処理
} else {
echo "以下のエラーを修正してください:<br>";
foreach ($errors as $field => $message) {
echo "- {$message}<br>";
}
}
}
?>
よくある間違いと対策

代入と比較の混同
<?php
// 間違い:代入演算子を使ってしまう
if ($status = 'active') { // ❌ 常にtrueになる
echo "アクティブです";
}
// 正しい:比較演算子を使う
if ($status === 'active') { // ✅
echo "アクティブです";
}
?>
型の混同
<?php
// 注意が必要な比較
var_dump(0 == false); // true(予期しない結果の可能性)
var_dump(0 === false); // false(型も厳密に比較)
var_dump("10" == 10); // true
var_dump("10" === 10); // false
// 推奨:厳密比較を使う
if ($userInput === "0") { // 文字列の"0"
// 処理
}
?>
論理演算子の優先順位
<?php
// 間違いやすい例
$result = true || false && false; // true(&& が先に評価される)
// 明確にするために括弧を使用
$result = (true || false) && false; // false
$result = true || (false && false); // true
?>
まとめ
PHPの演算子をマスターすることで、より効率的で読みやすいコードが書けるようになります。
この記事のポイント:
- 算術演算子:基本的な計算操作
- 比較演算子:
===
を使った厳密な比較を推奨 - 論理演算子:条件の組み合わせに活用
- 代入演算子:
+=
、.=
などで効率的な更新 - 特殊演算子:三項演算子、NULL合体演算子で簡潔な記述
コメント