Equality & Identity
CoddyのPHPジャーニー「基礎」セクションの一部 — レッスン 24/71。
PHP は、値が等しいかどうかをチェックする2つの方法を提供します:等価演算子 (==) と 同一性演算子 (===)。この違いを理解することは、信頼性の高いコードを書くために重要です。
等価演算子 (==) は、値を同じ型に変換した後に値を比較します。これを「ゆるい比較」と呼びます:
<?php
var_dump(5 == "5"); // bool(true) - 文字列が数値に変換される
var_dump(0 == false); // bool(true) - 両方とも 0 になる
var_dump(1 == true); // bool(true) - 両方とも 1 になる
?>同一性演算子(===)は値と型の両方を比較します。変換は行われないため、両方が完全に一致する必要があります:
<?php
var_dump(5 === "5"); // bool(false) - int 対 string
var_dump(5 === 5); // bool(true) - 同じ型と値
var_dump(0 === false); // bool(false) - int 対 bool
?>「等しくない」比較には、!= (緩い) または !== (厳密) を使用します:
<?php
var_dump(5 != "5"); // bool(false) - 値は等しい
var_dump(5 !== "5"); // bool(true) - 型が異なる
?>ベストプラクティスとして、予期せぬ型変換の驚きを避けるために === と !== を優先してください。
チャレンジ
簡単入力から2つの値を読取:数値(文字列として)と整数。
等価性および同一性演算子を使用して、以下の比較を評価し、各結果をvar_dump()を使用して新しい行にそれぞれ出力してください:
- 緩い比較(
==)を使用して、文字列値が整数と等しいかをチェック - 厳密な比較(
===)を使用して、文字列値が整数と等しいかをチェック - 緩い比較(
!=)を使用して、文字列値が整数と等しくないかをチェック - 厳密な比較(
!==)を使用して、文字列値が整数と等しくないかをチェック
注意: 最初の値を文字列として保持(キャストしない)。2番目の値を整数にキャスト。
例:
入力が42と42の場合、出力は次のようになります:
bool(true)
bool(false)
bool(false)
bool(true)説明:
"42" == 42は true です(型変換後の値が等しい)"42" === 42は false です(文字列 vs int - 型が異なる)"42" != 42は false です(値が等しい)"42" !== 42は true です(型が異なる)
チートシート
PHPには値を比較する2つの方法があります:
等価演算子 (==) - 比較前に値を同じ型に変換する緩い比較:
<?php
var_dump(5 == "5"); // bool(true) - string converted to number
var_dump(0 == false); // bool(true) - both become 0
var_dump(1 == true); // bool(true) - both become 1
?>同一性演算子 (===) - 値と型両方をチェックする厳密な比較:
<?php
var_dump(5 === "5"); // bool(false) - int vs string
var_dump(5 === 5); // bool(true) - same type and value
var_dump(0 === false); // bool(false) - int vs bool
?>等しくない演算子:
<?php
var_dump(5 != "5"); // bool(false) - values are equal (loose)
var_dump(5 !== "5"); // bool(true) - types differ (strict)
?>ベストプラクティス:予期しない型変換を避けるために === と !== を使用してください。
自分で試してみよう
<?php
// 入力の読み取り
$stringValue = trim(fgets(STDIN));
$intValue = intval(trim(fgets(STDIN)));
// TODO: 以下にコードを書く
// var_dump() を使用して、各比較の結果を新しい行に印刷する:
// 1. 緩い等価 (==)
// 2. 厳密な等価 (===)
// 3. 緩い不等価 (!=)
// 4. 厳密な不等価 (!==)
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
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