PHPの論理演算子とは、複数の条件を組み合わせて判定するための演算子です。
たとえば、次のような条件を作りたいときに使います。
ログインしている かつ 管理者である
メールアドレス または 電話番号が入力されている
ログインしていない場合に処理する
PHPでは、if文やwhile文、フォームの入力チェック、ログイン判定、権限チェックなどで論理演算子をよく使います。
代表的な論理演算子は、次のとおりです。
| 演算子 | 意味 | 例 |
|---|---|---|
&& | かつ / AND | $a && $b |
| ` | ` | |
! | 否定 / NOT | !$a |
and | かつ / AND | $a and $b |
or | または / OR | $a or $b |
xor | 排他的論理和 | $a xor $b |
実務では、基本的に次の3つを中心に使うとよいです。
&&
||
!
and、or、xorも使えますが、PHPでは演算子の優先順位に注意が必要です。
特にandとorは、代入と組み合わせると思わぬ結果になることがあります。
&&:両方がtrueのときtrueになる
&&は「かつ」を表す論理演算子です。
左側と右側の条件が両方ともtrueの場合だけtrueになります。
$age = 25;
$hasTicket = true;
if ($age >= 20 && $hasTicket) {
echo "入場できます";
}
このコードでは、次の2つの条件を判定しています。
$age >= 20
$hasTicket
$ageは25なので、$age >= 20はtrueです。
また、$hasTicketもtrueです。
そのため、条件全体がtrueになり、次の文字列が表示されます。
入場できます
&&の真理値表
&&の結果は、次のようになります。
| 左辺 | 右辺 | 結果 |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
&&は、1つでもfalseがあると全体がfalseになります。
たとえば、次のコードでは条件全体がfalseになります。
$age = 18;
$hasTicket = false;
if ($age >= 20 && $hasTicket) {
echo "入場できます";
} else {
echo "入場できません";
}
$age >= 20もfalse、$hasTicketもfalseなので、結果は次のようになります。
入場できません
||:どちらかがtrueならtrueになる
||は「または」を表す論理演算子です。
左側と右側の条件のうち、どちらか一方でもtrueならtrueになります。
$isAdmin = false;
$isEditor = true;
if ($isAdmin || $isEditor) {
echo "編集画面にアクセスできます";
}
このコードでは、$isAdminはfalseですが、$isEditorがtrueです。
||はどちらか一方がtrueなら条件全体がtrueになるため、次の文字列が表示されます。
編集画面にアクセスできます
||の真理値表
||の結果は、次のようになります。
| 左辺 | 右辺 | 結果 |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
||は、両方ともfalseの場合だけfalseになります。
たとえば、次のコードでは条件全体がfalseになります。
$isAdmin = false;
$isEditor = false;
if ($isAdmin || $isEditor) {
echo "編集画面にアクセスできます";
} else {
echo "アクセスできません";
}
結果は次のようになります。
アクセスできません
!:trueとfalseを反転する
!は「否定」を表す論理演算子です。
trueをfalseに、falseをtrueに反転します。
$isLoggedIn = false;
if (!$isLoggedIn) {
echo "ログインしてください";
}
$isLoggedInはfalseです。
そのため、!$isLoggedInはtrueになります。
!false
はtrueになるため、次の文字列が表示されます。
ログインしてください
!の基本的な考え方
!の動きは次のとおりです。
!true // false
!false // true
たとえば、ログインしていない場合、権限がない場合、値が空ではない場合などに使います。
if (!$isAdmin) {
echo "管理者ではありません";
}
if (!empty($name)) {
echo "名前が入力されています";
}
if (!isset($user)) {
echo "ユーザー情報がありません";
}
!はシンプルですが、条件が複雑になると読みにくくなりやすい演算子でもあります。
たとえば、次のような条件は少し読みにくくなります。
if (!$isLoggedIn || !$isActive || !$hasPermission) {
echo "アクセスできません";
}
このような場合は、処理を分けて書くと読みやすくなります。
if (!$isLoggedIn) {
echo "ログインしてください";
exit;
}
if (!$isActive) {
echo "アカウントが無効です";
exit;
}
if (!$hasPermission) {
echo "権限がありません";
exit;
}
echo "アクセスできます";
andとorも使えるが注意が必要
PHPには、&&と||のほかに、andとorもあります。
$a = true;
$b = false;
var_dump(($a and $b)); // bool(false)
var_dump(($a or $b)); // bool(true)
意味としては、次のように対応しています。
&& と and
|| と or
ただし、まったく同じ感覚で使うと危険です。
理由は、&& / || と and / or では、演算子の優先順位が違うからです。
&&とandの違い
&&とandは、どちらも「かつ」を表します。
しかし、代入と組み合わせたときの結果が変わることがあります。
まず、次のコードを見てください。
$result = true && false;
var_dump($result);
結果は次のようになります。
bool(false)
これは自然な結果です。
true && falseが先に評価され、その結果であるfalseが$resultに代入されます。
つまり、次のように解釈できます。
$result = (true && false);
一方で、次のコードはどうでしょうか。
$result = true and false;
var_dump($result);
結果は次のようになります。
bool(true)
一見すると不思議に見えるかもしれません。
しかし、PHPではandよりも代入演算子=のほうが優先されます。
そのため、実際には次のように解釈されます。
($result = true) and false;
つまり、まず$resultにtrueが代入されます。
その後にand falseが評価されますが、$resultに入った値はtrueのままです。
andより&&を使うほうが安全
実務では、次のように&&を使うほうが安全です。
$result = true && false;
どうしてもandを使う場合は、括弧を付けると意図が明確になります。
$result = (true and false);
ただし、通常の条件式では&&を使うほうが読みやすく、ミスも防ぎやすいです。
||とorの違い
||とorも同じように注意が必要です。
まず、次のコードを見てください。
$result = false || true;
var_dump($result);
結果は次のようになります。
bool(true)
false || trueが先に評価され、その結果であるtrueが$resultに代入されます。
つまり、次のように解釈できます。
$result = (false || true);
一方で、次のコードは結果が変わります。
$result = false or true;
var_dump($result);
結果は次のようになります。
bool(false)
これは、orよりも代入演算子=のほうが優先されるためです。
実際には、次のように解釈されます。
($result = false) or true;
そのため、$resultにはfalseが代入されます。
orより||を使うほうが安全
通常は、次のように||を使うほうが安全です。
$result = false || true;
どうしてもorを使う場合は、括弧を付けると意図が明確になります。
$result = (false or true);
特に、代入とand / orを組み合わせるコードは、読み間違いやバグの原因になりやすいです。
xor:どちらか一方だけtrueのときtrueになる
xorは「排他的論理和」と呼ばれる論理演算子です。
意味は、どちらか一方だけがtrueの場合にtrueです。
$a = true;
$b = false;
var_dump(($a xor $b)); // bool(true)
xorの真理値表
xorの結果は、次のようになります。
| 左辺 | 右辺 | 結果 |
|---|---|---|
| true | true | false |
| true | false | true |
| false | true | true |
| false | false | false |
xorは、両方trueの場合はfalseになります。
つまり、「AまたはBのどちらか一方だけ」という条件を作りたいときに使えます。
xorの使用例
たとえば、メールアドレスまたは電話番号のどちらか一方だけが入力されている場合に処理したいとします。
$hasEmail = true;
$hasPhone = false;
if ($hasEmail xor $hasPhone) {
echo "どちらか一方だけ入力されています";
}
この場合、$hasEmailはtrue、$hasPhoneはfalseなので、条件全体はtrueです。
ただし、xorは実務ではあまり頻繁に使われません。
読みやすさを重視するなら、次のように明示的に書くこともあります。
if (($hasEmail && !$hasPhone) || (!$hasEmail && $hasPhone)) {
echo "どちらか一方だけ入力されています";
}
少し長くなりますが、「片方だけtrue」という意図は伝わりやすくなります。
また、代入と組み合わせる場合は、次のように括弧を付けると安全です。
$result = ($hasEmail xor $hasPhone);
PHPでfalseとして扱われる値
PHPでは、条件式の中で必ずしもtrueやfalseだけを扱うわけではありません。
次のような値は、条件式の中でfalseとして扱われます。
false
0
0.0
-0.0
""
"0"
[]
null
たとえば、次のコードを見てください。
$value = "";
if ($value) {
echo "true扱い";
} else {
echo "false扱い";
}
空文字""はfalseとして扱われるため、結果は次のようになります。
false扱い
文字列"0"もfalse扱いになる
PHPで特に注意したいのが、文字列"0"です。
$value = "0";
if ($value) {
echo "true扱い";
} else {
echo "false扱い";
}
この場合も、結果は次のようになります。
false扱い
"0"は文字列ですが、PHPでは条件式の中でfalseとして扱われます。
フォーム入力やデータベースの値を扱うときに、意図しない判定になることがあるため注意が必要です。
たとえば、次のような値はtrueとして扱われます。
"false"
"0.0"
"00"
" "
"abc"
特に、文字列"false"はfalseではなくtrue扱いです。
var_dump((bool) "false"); // bool(true)
「文字として何か入っているか」と「論理的にfalseか」は別物として考える必要があります。
empty()と論理演算子の関係
PHPでは、empty()と論理演算子を組み合わせることがよくあります。
$name = "";
$email = "test@example.com";
if (!empty($name) && !empty($email)) {
echo "名前とメールアドレスが入力されています";
} else {
echo "未入力項目があります";
}
このコードでは、$nameが空文字なので、empty($name)はtrueになります。
そのため、!empty($name)はfalseになります。
結果として、条件全体はfalseになり、次の文字列が表示されます。
未入力項目があります
empty()は"0"も空と判定する
empty()で注意したいのは、"0"も空と判定されることです。
$value = "0";
if (!empty($value)) {
echo "入力あり";
} else {
echo "未入力";
}
この場合、結果は次のようになります。
未入力
"0"を有効な値として扱いたい場合、empty()だけに頼ると意図しない判定になることがあります。
"0"を有効な入力として扱う場合
たとえば、フォームで人数や数量を入力する場合、0が有効な値になることがあります。
そのような場合は、次のように判定すると安全です。
$value = $_POST['count'] ?? null;
if ($value !== null && $value !== '') {
echo "入力されています";
}
この条件では、nullと空文字""は未入力として扱います。
一方、文字列"0"は有効な入力として扱われます。
空白だけの入力も未入力として扱いたい場合は、trim()を使います。
$value = $_POST['count'] ?? null;
if ($value !== null && trim($value) !== '') {
echo "入力されています";
}
論理演算子は短絡評価される
PHPの論理演算子には、短絡評価という仕組みがあります。
短絡評価とは、条件式の結果が確定した時点で、それ以上の式を評価しない仕組みです。
&&、||、and、orは短絡評価されます。
&&の短絡評価
&&では、左側がfalseになった時点で、条件全体がfalseと確定します。
そのため、右側の式は評価されません。
$user = null;
if ($user !== null && $user->isAdmin()) {
echo "管理者です";
}
このコードでは、まず次の条件が評価されます。
$user !== null
$userはnullなので、この条件はfalseです。
&&では、左側がfalseの時点で全体がfalseと確定します。
そのため、次の処理は実行されません。
$user->isAdmin()
もし右側が実行されると、nullに対してメソッドを呼び出すことになり、エラーの原因になります。
しかし、短絡評価によって右側が評価されないため、安全に判定できます。
安全性チェックは先に書く
短絡評価を活用するときは、条件の順番が重要です。
安全な例は次のような書き方です。
if (isset($_GET['id']) && $_GET['id'] !== '') {
echo "IDがあります";
}
先にisset($_GET['id'])で存在確認をしているため、$_GET['id']が存在しない場合でも安全です。
一方で、次のような書き方は避けるべきです。
if ($_GET['id'] !== '' && isset($_GET['id'])) {
echo "IDがあります";
}
この場合、isset()で確認する前に$_GET['id']を参照しています。
$_GET['id']が存在しない場合、未定義の配列キーを参照することになり、警告の原因になります。
||の短絡評価
||では、左側がtrueになった時点で、条件全体がtrueと確定します。
そのため、右側の式は評価されません。
$isAdmin = true;
if ($isAdmin || hasPermission()) {
echo "アクセスできます";
}
このコードでは、$isAdminがtrueです。
||では、左側がtrueの時点で全体がtrueと確定します。
そのため、次の関数は実行されません。
hasPermission()
このように、短絡評価を理解しておくと、無駄な処理を減らしたり、エラーを防いだりできます。
複雑な条件では括弧を使う
論理演算子を複数組み合わせる場合は、括弧を使うと安全です。
たとえば、次のコードを見てください。
if (($isAdmin || $isEditor) && $isLoggedIn) {
echo "管理画面にアクセスできます";
}
この条件は、次の意味です。
管理者または編集者であり、かつログインしている
つまり、$isAdminか$isEditorのどちらかがtrueで、さらに$isLoggedInがtrueの場合に条件が成立します。
括弧がないと意図が変わることがある
次のように括弧を省略すると、意味がわかりにくくなります。
if ($isAdmin || $isEditor && $isLoggedIn) {
echo "管理画面にアクセスできます";
}
PHPでは、&&のほうが||より優先順位が高いため、実際には次のように解釈されます。
if ($isAdmin || ($isEditor && $isLoggedIn)) {
echo "管理画面にアクセスできます";
}
この場合、$isAdminがtrueであれば、$isLoggedInがfalseでも条件全体がtrueになります。
もし「管理者または編集者で、かつログインしている」という意味にしたいなら、次のように括弧を付けるべきです。
if (($isAdmin || $isEditor) && $isLoggedIn) {
echo "管理画面にアクセスできます";
}
複雑な条件では、演算子の優先順位に頼りすぎず、括弧で意図を明確にすることが大切です。
比較演算子と論理演算子を組み合わせる
論理演算子は、比較演算子と組み合わせて使うことが多いです。
たとえば、価格が1000円以上かつ3000円以下かどうかを判定する場合は、次のように書きます。
$price = 1200;
if ($price >= 1000 && $price <= 3000) {
echo "価格は範囲内です";
}
この条件は、次の2つを同時に満たす場合にtrueになります。
$price >= 1000
$price <= 3000
つまり、価格が1000円以上3000円以下であれば、条件が成立します。
「または」の条件を作る例
18歳未満または65歳以上を割引対象にする場合は、次のように書けます。
$age = 17;
if ($age < 18 || $age >= 65) {
echo "割引対象です";
}
この場合、$age < 18がtrueなので、条件全体もtrueになります。
==より===を使うと安全
PHPでは、比較演算子として==と===があります。
$a == $b
==は、型をゆるく比較します。
一方で、次のように書くと、値と型の両方を比較します。
$a === $b
PHPでは、型変換によって意図しない判定になることがあります。
そのため、実務では基本的に===や!==を使うほうが安全です。
===を使った例
$status = "0";
if ($status === "0" || $status === "1") {
echo "有効なステータスです";
}
このコードでは、$statusが文字列の"0"または文字列の"1"である場合に条件が成立します。
型まで含めて比較しているため、意図しない型変換を避けやすくなります。
実務でよく使う論理演算子のパターン
ここからは、PHPでよく使う論理演算子の実用例を紹介します。
ログイン済みかつ管理者かを判定する
ログイン済みで、かつ管理者の場合だけ処理したいときは、&&を使います。
if ($isLoggedIn && $role === 'admin') {
echo "管理者ページを表示";
}
この条件は、次の2つを満たす場合にtrueになります。
$isLoggedIn
$role === 'admin'
どちらか一方でもfalseであれば、条件全体はfalseになります。
管理者または編集者かを判定する
管理者または編集者にアクセスを許可したい場合は、||を使います。
if ($role === 'admin' || $role === 'editor') {
echo "編集画面にアクセスできます";
}
この条件は、$roleがadminまたはeditorの場合にtrueになります。
ログインしていない場合にリダイレクトする
ログインしていない場合にログインページへ移動させるなら、!を使えます。
if (!$isLoggedIn) {
header('Location: /login.php');
exit;
}
$isLoggedInがfalseの場合、!$isLoggedInはtrueになります。
そのため、ログインページへリダイレクトされます。
header()でリダイレクトしたあとは、基本的にexitを書いて処理を終了させます。
複数の権限をまとめて判定する
ログイン済みで、さらに管理者または編集者だけを許可したい場合は、&&と||を組み合わせます。
if ($isLoggedIn && ($role === 'admin' || $role === 'editor')) {
echo "編集できます";
}
このコードでは、次の条件を判定しています。
ログインしている
かつ、
管理者または編集者である
($role === 'admin' || $role === 'editor')の部分を括弧で囲むことで、意図が明確になります。
ユーザー情報を安全に判定する
オブジェクトが存在するかどうかを確認してから、メソッドやプロパティを参照することも重要です。
if (
$user &&
$user->isActive() &&
($user->role === 'admin' || $user->role === 'editor') &&
!$user->isSuspended()
) {
echo "アクセス可能";
}
このコードでは、最初に$userが存在するかを確認しています。
$user
$userがfalseやnullの場合、&&の短絡評価により、後続の条件は評価されません。
そのため、次のような処理が実行されずに済みます。
$user->isActive()
$user->role
$user->isSuspended()
nullに対してメソッドやプロパティを参照するとエラーになるため、存在確認を先に書くことが大切です。
条件を変数に分けて読みやすくする
条件が長くなる場合は、変数に分けると読みやすくなります。
ただし、先に$userの存在確認をすることが重要です。
if (!$user) {
echo "アクセス不可";
exit;
}
$isActive = $user->isActive();
$hasEditRole = $user->role === 'admin' || $user->role === 'editor';
$isNotSuspended = !$user->isSuspended();
if ($isActive && $hasEditRole && $isNotSuspended) {
echo "アクセス可能";
}
このように書くと、それぞれの条件に意味のある名前を付けられます。
$isActive
$hasEditRole
$isNotSuspended
条件の意味がわかりやすくなるため、後からコードを読む人にも伝わりやすくなります。
フォームの必須入力チェック
フォームの入力チェックでは、empty()と論理演算子を組み合わせることがよくあります。
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
if (!empty($name) && !empty($email)) {
echo "送信できます";
} else {
echo "未入力項目があります";
}
このコードでは、名前とメールアドレスの両方が入力されている場合に「送信できます」と表示します。
どちらか一方でも空であれば、条件全体はfalseになります。
ただし、empty()は"0"も空と判定するため、数値や数量の入力チェックでは注意が必要です。
どちらか一方の入力をチェックする
メールアドレスまたは電話番号のどちらかが入力されていればよい場合は、||を使います。
$email = $_POST['email'] ?? '';
$phone = $_POST['phone'] ?? '';
if (!empty($email) || !empty($phone)) {
echo "連絡先が入力されています";
} else {
echo "メールアドレスまたは電話番号を入力してください";
}
この条件では、$emailまたは$phoneのどちらかが入力されていればtrueになります。
GETパラメータを安全にチェックする
URLパラメータを扱う場合は、先に存在確認をすることが大切です。
if (isset($_GET['id']) && $_GET['id'] !== '') {
echo htmlspecialchars($_GET['id'], ENT_QUOTES, 'UTF-8');
}
このコードでは、まず$_GET['id']が存在するかを確認しています。
存在していて、さらに空文字でなければ、値を表示します。
出力時にはhtmlspecialchars()を使うことで、HTMLとして解釈される文字をエスケープできます。
null合体演算子を使う書き方
PHPでは、null合体演算子??を使って次のように書くこともできます。
$id = $_GET['id'] ?? null;
if ($id !== null && $id !== '') {
echo htmlspecialchars($id, ENT_QUOTES, 'UTF-8');
}
この書き方では、$_GET['id']が存在しない場合にnullを代入します。
その後、nullでも空文字でもない場合に処理します。
配列の中身をチェックする
配列を処理する場合は、まず配列であることを確認すると安全です。
if (is_array($items) && !empty($items)) {
foreach ($items as $item) {
echo $item;
}
}
このコードでは、まず$itemsが配列かどうかを確認しています。
そのうえで、空でない場合にforeachで処理しています。
ただし、空配列の場合はforeachが何もしないだけなので、場合によっては次のように書いても問題ありません。
if (is_array($items)) {
foreach ($items as $item) {
echo $item;
}
}
空チェックが必要かどうかは、処理内容によって判断するとよいです。
論理演算子でよくあるミス
PHPの論理演算子では、いくつかよくあるミスがあります。
特に、代入と比較の間違い、演算子の優先順位、empty()の挙動には注意しましょう。
=と==や===を間違える
よくあるミスの1つが、比較のつもりで代入してしまうケースです。
if ($isAdmin = true) {
echo "管理者です";
}
このコードは、$isAdminがtrueかどうかを比較しているのではありません。
$isAdminにtrueを代入しています。
その結果、条件はtrueになり、常に処理が実行されてしまいます。
正しく比較するなら、次のように書きます。
if ($isAdmin === true) {
echo "管理者です";
}
ただし、$isAdminが真偽値であることが明確なら、次のように書くことも多いです。
if ($isAdmin) {
echo "管理者です";
}
&&と||の優先順位を誤解する
&&と||を組み合わせる場合、優先順位に注意が必要です。
if ($isAdmin || $isEditor && $isLoggedIn) {
echo "アクセス可能";
}
このコードは、次のように解釈されます。
if ($isAdmin || ($isEditor && $isLoggedIn)) {
echo "アクセス可能";
}
もし「管理者または編集者で、かつログインしている」という意味にしたいなら、次のように書きます。
if (($isAdmin || $isEditor) && $isLoggedIn) {
echo "アクセス可能";
}
条件が複雑な場合は、括弧を使って意図を明確にしましょう。
andやorを代入と組み合わせる
andやorを代入と組み合わせると、意図しない結果になることがあります。
避けたい例は次のとおりです。
$result = $a or $b;
このコードは、次のように解釈される可能性があります。
($result = $a) or $b;
つまり、$a or $bの結果ではなく、$aの値が$resultに代入されます。
安全に書くなら、次のようにします。
$result = $a || $b;
または、orを使う場合は括弧を付けます。
$result = ($a or $b);
ただし、基本的には||を使うほうがおすすめです。
empty()で"0"が未入力扱いになる
empty()は便利ですが、"0"も空と判定します。
$value = "0";
if (!empty($value)) {
echo "入力あり";
} else {
echo "未入力";
}
このコードの結果は次のようになります。
未入力
"0"を有効な値として扱う場合は、次のように判定しましょう。
if ($value !== null && $value !== '') {
echo "入力あり";
}
PHPの論理演算子を使うときのコツ
PHPの論理演算子は、慣れればシンプルに使えます。
ただし、PHP特有の型変換や演算子の優先順位を理解していないと、意図しないバグにつながります。
基本は&&と||を使う
通常の条件式では、基本的に次の3つを使うとよいです。
&&
||
!
andやorも使えますが、優先順位の違いによって読み間違いやバグが起きやすくなります。
特別な理由がなければ、&&と||を使うほうが安全です。
複雑な条件では括弧を使う
条件が複雑になる場合は、括弧を使いましょう。
if (($isAdmin || $isEditor) && $isLoggedIn) {
echo "アクセス可能";
}
括弧を使うことで、どの条件を先に評価したいのかが明確になります。
コードを書いた本人だけでなく、後から読む人にも意図が伝わりやすくなります。
安全性チェックを先に書く
短絡評価を活用するためには、条件の順番が重要です。
安全な例は次のとおりです。
if ($user && $user->isActive()) {
echo "有効なユーザーです";
}
$userが存在しない場合、$user->isActive()は評価されません。
一方で、次のように書くと危険です。
if ($user->isActive() && $user) {
echo "有効なユーザーです";
}
この場合、$userが存在しないときに、先に$user->isActive()が実行されてしまいます。
条件式では、存在確認や型チェックを先に書くことを意識しましょう。
条件が長い場合は変数に分ける
条件が長くなりすぎると、読みにくくなります。
if ($user && $user->isActive() && ($user->role === 'admin' || $user->role === 'editor') && !$user->isSuspended()) {
echo "アクセス可能";
}
このような場合は、変数に分けると読みやすくなります。
if (!$user) {
echo "アクセス不可";
exit;
}
$isActive = $user->isActive();
$hasEditRole = $user->role === 'admin' || $user->role === 'editor';
$isNotSuspended = !$user->isSuspended();
if ($isActive && $hasEditRole && $isNotSuspended) {
echo "アクセス可能";
}
条件に名前を付けることで、コードの意図が明確になります。
PHPの論理演算子のまとめ
PHPの論理演算子は、条件分岐を作るうえで欠かせない機能です。
特に重要なのは、次の3つです。
&& // かつ
|| // または
! // 否定
&&は、両方の条件がtrueの場合にtrueになります。
if ($a && $b) {
// $aも$bもtrueの場合
}
||は、どちらか一方の条件がtrueの場合にtrueになります。
if ($a || $b) {
// $aまたは$bのどちらかがtrueの場合
}
!は、trueとfalseを反転します。
if (!$a) {
// $aがfalseの場合
}
また、PHPにはand、or、xorもあります。
ただし、andやorは&&や||と優先順位が異なるため、代入と組み合わせると意図しない結果になることがあります。
実務では、次のポイントを意識すると安全です。
| ポイント | 内容 |
|---|---|
基本は&&と` | |
| 複雑な条件は括弧で囲む | 条件の意図が明確になる |
| 安全性チェックを先に書く | isset()やnullチェックを先に行う |
empty()の挙動に注意する | "0"も空として扱われる |
比較は===を優先する | 型変換によるバグを避けやすい |
| 条件が長いときは変数に分ける | 読みやすく保守しやすい |
PHPの論理演算子は、基本的な使い方自体は難しくありません。
しかし、and / orの優先順位、empty()の挙動、"0"の扱い、短絡評価の順番など、PHP特有の注意点があります。
初心者のうちは、まず次の方針で書くと安全です。
if ($a && $b) {
// 両方trueの場合
}
if ($a || $b) {
// どちらかがtrueの場合
}
if (!$a) {
// falseの場合
}
そして、複雑な条件では括弧を付ける、and / orより&& / ||を使う、安全性チェックを先に書く、という点を意識すると、PHPの条件分岐をより安全に書けます。
以上、PHPの論理演算子についてでした。
最後までお読みいただき、ありがとうございました。









