ホームページ >バックエンド開発 >PHPチュートリアル >PHPの比較演算子
比較演算子は、その名前が示すように、2 つの値を比較できます。
比較演算子
例$a は $b に等しい。 $a === $b $a が $b に等しく、それらの型が同じ場合に合同 TRUE。 $a != $b 等しくない 型変換後に $a が $b と等しくない場合、TRUE。
$a a8093152e673feb7aba1828c43532094 型変換後に $a が $b と等しくない場合、$b は TRUE と等しくない。
$a !== $b Not Congruent $a が $b と等しくない場合、またはそれらの型が異なる場合は TRUE。
$a
$a > $b は、$a が厳密に $b より大きい場合に TRUE より大きくなります。
$a
$a >= $b $a が $b 以上の場合、TRUE 以上。
数値と文字列を比較する場合、または数値内容を含む文字列を比較する場合、文字列は数値に変換され、数値として比較が実行されます。このルールは switch ステートメントにも適用されます。 === または !== で比較する場合、型と値の両方が比較されるため、型変換は行われません。
<?php var_dump(0 == "a"); // 0 == 0 -> true var_dump("1" == "01"); // 1 == 1 -> true var_dump("10" == "1e1"); // 10 == 10 -> true var_dump(100 == "1e2"); // 100 == 100 -> true switch ("a") { case 0: echo "0"; break; case "a": // never reached because "a" is already matched with 0 echo "a"; break; } ?>
複数の型の場合、比較演算子は次の表に従って (順番に) 比較されます。
複数の型を比較
operand1 type
operand2 type
result
null または string string 数値または字句比較の場合、NULL を "" に変換します
bool または null 他の型 bool、FALSE < に変換します; TRUE
object オブジェクト 組み込みクラスは独自の比較を定義できますが、異なるクラスは比較できません。同じクラスと配列のプロパティは同じ方法で比較されます (PHP 4)。PHP 5 には独自の説明があります
string 、リソースまたは数値 文字列、リソースまたは数値 文字列とリソースを数値に変換し、通常の数学に従って比較します
array 配列 メンバーの少ない配列は小さくなります。オペランド 1 のキーがオペランド 2 に存在しない場合、配列は比較できません。それ以外の場合は、配列を比較できません。それらは 1 つずつ比較されます (以下の例を参照)
object 他の型 オブジェクトは常に大きくなります
array 他の型 配列は常に大きくなります
例 #1 標準の配列比較コード
<?php // 数组是用标准比较运算符这样比较的 function standard_array_compare($op1, $op2) { if (count($op1) < count($op2)) { return -1; // $op1 < $op2 } elseif (count($op1) > count($op2)) { return 1; // $op1 > $op2 } foreach ($op1 as $key => $val) { if (!array_key_exists($key, $op2)) { return null; // uncomparable } elseif ($val < $op2[$key]) { return -1; } elseif ($val > $op2[$key]) { return 1; } } return 0; // $op1 == $op2 } ?>
警告:浮動小数点数の内部表現 float は、2 つの浮動小数点数が等しいかどうかを比較してはなりません。
三項演算子もう 1 つの条件演算子は、「?:」 (または三項) 演算子です。 例 #2 デフォルト値を割り当てる<?php // Example usage for: Ternary Operator $action = (empty($_POST['action'])) ? 'default' : $_POST['action']; // The above is identical to this if/else statement if (empty($_POST['action'])) { $action = 'default'; } else { $action = $_POST['action']; } ?>
PHP 5.3以降、三項演算子の中間部分を省略できるようになりました。式 expr1 ?: expr3 は、expr1 が TRUE と評価される場合は expr1 を返し、それ以外の場合は expr3 を返します。
注: 三項演算子はステートメントであるため、その評価は変数ではなくステートメントの結果であることに注意してください。これは、変数を参照によって返したい場合に重要です。参照によって返される関数内のステートメント return $var == 42 ? $a : $b; は機能せず、PHP の将来のバージョンではこれに関する警告が発行されます。
注:
三項演算子を積み重ねないことをお勧めします。 1 つのステートメントで複数の三項演算子が使用されている場合、PHP の演算結果は不明確になります:
例 #3 不明確な三項演算子の動作
<?php // 乍看起来下面的输出是 'true' echo (true?'true':false?'t':'f'); // 然而,上面语句的实际输出是't',因为三元运算符是从左往右计算的 // 下面是与上面等价的语句,但更清晰 echo ((true ? 'true' : 'false') ? 't' : 'f'); // here, you can see that the first expression is evaluated to 'true', which // in turn evaluates to (bool)true, thus returning the true branch of the // second ternary expression. ?>