Logical Operators Part 2
CoddyのPHPジャーニー「基礎」セクションの一部 — レッスン 26/71。
NOT 演算子 (!) は、ブール値をその反対の値に反転させます。何かが true の場合、false になり、その逆も同様です:
<?php
$isLoggedIn = false;
$showLoginButton = !$isLoggedIn;
var_dump($showLoginButton); // bool(true)
$isLoggedIn = true;
$showLoginButton = !$isLoggedIn;
var_dump($showLoginButton); // bool(false)
?>複数の論理演算子を1つの式で組み合わせることができます。そうする際は、括弧を使用して意図を明確にしてください:
<?php
$age = 25;
$hasTicket = true;
$isVIP = false;
// 入場可能条件:チケットあり AND (成人 OR VIP)
$canEnter = $hasTicket && ($age >= 18 || $isVIP);
var_dump($canEnter); // bool(true)
?>括弧を使わない場合、&& は || より先に評価されます。しかし、括弧を使うことでコードが読みやすくなり、ミスを防げます。演算子を組み合わせる際は、常に条件を論理的にグループ化して、意図を正確に表現してください。
チャレンジ
簡単入力から4つの値を読取:整数 temperature、文字列 isRaining("true" または "false" のいずれか)、文字列 hasUmbrella("true" または "false" のいずれか)、および文字列 hasRaincoat("true" または "false" のいずれか)。
文字列の値を "true" と比較してブール値に変換します。
以下の3つの条件を評価し、各結果を var_dump() を使用して新しい行にそれぞれ出力します:
- 雨が降っていないかをチェック(
!演算子を使用) - その人が室内に留まるべきかをチェック:雨が降っていてかつ傘もレインコートもない(両方のアイテムに
!を使用) - その人が快適に外に出られるかをチェック:気温が少なくとも 15 度かつ(雨が降っていないまたは傘かレインコートを持っている)
例:
入力が 20、true、false、および true の場合、出力は次のようになります:
bool(false)
bool(false)
bool(true)説明:
!isRaining→ !true → falseisRaining && !hasUmbrella && !hasRaincoat→ true && true && false → falsetemperature >= 15 && (!isRaining || hasUmbrella || hasRaincoat)→ true && (false || false || true) → true && true → true
チートシート
NOT 演算子 (!) は、ブール値を反対の値に反転させます:
<?php
$isLoggedIn = false;
$showLoginButton = !$isLoggedIn;
var_dump($showLoginButton); // bool(true)
$isLoggedIn = true;
$showLoginButton = !$isLoggedIn;
var_dump($showLoginButton); // bool(false)
?>複数の論理演算子を1つの式で組み合わせることができます。意図を明確にするために括弧を使用してください:
<?php
$age = 25;
$hasTicket = true;
$isVIP = false;
// Can enter if: has ticket AND (is adult OR is VIP)
$canEnter = $hasTicket && ($age >= 18 || $isVIP);
var_dump($canEnter); // bool(true)
?>括弧なしで、&& が || より先に評価されます。ただし、括弧を使用することでコードが読みやすくなり、ミスを防げます。
自分で試してみよう
<?php
// 入力値を読み取る
$temperature = intval(fgets(STDIN));
$isRainingStr = trim(fgets(STDIN));
$hasUmbrellaStr = trim(fgets(STDIN));
$hasRaincoatStr = trim(fgets(STDIN));
// TODO: 文字列値を "true" に比較してブール値に変換する
// TODO: var_dump() を使用して3つの条件を評価し、出力する:
// 1. 雨が降っていないかをチェックする
// 2. その人が室内に留まるべきかチェックする(雨が降っていて傘がなくレインコートもない場合)
// 3. その人が快適に外に出られるかをチェックする
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Comparison & Logical Operators
Comparison OperatorsEquality & IdentityLogical Operators Part 1Logical Operators Part 2Recap - Simple Logic2Variables and Data Types
NumbersStrings and QuotesBooleansNaming ConventionsRecap - Variable InitEmpty VariablesString ConcatenationGetting User InputCast to Different Types3Basic Operators
Arithmetic OperatorsModulo OperatorExponentiation OperatorCombined AssignmentIncrement/DecrementOperator PrecedenceRecap - Simple CalculationsString Operators