PHPの比較演算子

伊谢尔伦
伊谢尔伦オリジナル
2016-11-24 13:30:501243ブラウズ

比較演算子は、その名前が示すように、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[&#39;action&#39;])) ? &#39;default&#39; : $_POST[&#39;action&#39;];
 // The above is identical to this if/else statement
 if (empty($_POST[&#39;action&#39;])) {
     $action = &#39;default&#39;;
 } else {
     $action = $_POST[&#39;action&#39;];
 }
 ?>

Expression (expr1) ? (expr2) : (expr3) expr1 が TRUE と評価された場合の値は expr2 で、 expr1 が FALSE と評価された場合の値は expr3 です。

PHP 5.3以降、三項演算子の中間部分を省略できるようになりました。式 expr1 ?: expr3 は、expr1 が TRUE と評価される場合は expr1 を返し、それ以外の場合は expr3 を返します。

注: 三項演算子はステートメントであるため、その評価は変数ではなくステートメントの結果であることに注意してください。これは、変数を参照によって返したい場合に重要です。参照によって返される関数内のステートメント return $var == 42 ? $a : $b; は機能せず、PHP の将来のバージョンではこれに関する警告が発行されます。

注:

三項演算子を積み重ねないことをお勧めします。 1 つのステートメントで複数の三項演算子が使用されている場合、PHP の演算結果は不明確になります:

例 #3 不明確な三項演算子の動作

<?php
// 乍看起来下面的输出是 &#39;true&#39;
echo (true?&#39;true&#39;:false?&#39;t&#39;:&#39;f&#39;);
// 然而,上面语句的实际输出是&#39;t&#39;,因为三元运算符是从左往右计算的
// 下面是与上面等价的语句,但更清晰
echo ((true ? &#39;true&#39; : &#39;false&#39;) ? &#39;t&#39; : &#39;f&#39;);
// here, you can see that the first expression is evaluated to &#39;true&#39;, which
// in turn evaluates to (bool)true, thus returning the true branch of the
// second ternary expression.
?>

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。