首頁  >  文章  >  後端開發  >  php比較運算符

php比較運算符

伊谢尔伦
伊谢尔伦原創
2016-11-24 13:30:501176瀏覽

比較運算符,如同它們名稱所暗示的,允許對兩個值進行比較。

比較運算子

範例         名稱                                    == $b    等於    TRUE,若型別轉換後 $a 等於 $b。    $a === $b    全等    TRUE,如果 $a 等於 $b,且它們的種類也相同。    

$a != $b    不等    TRUE,若型別轉換後 $a 不等於 $b。    

$a $b    不等    TRUE,若型別轉換後 $a 不等於 $b。    

$a !== $b    不全等    TRUE,如果 $a 不等於 $b,或它們的類型不同。    

$a $a > $b    大於    TRUE,若 $a 嚴格大於 $b。    

$a $a >= $b    大於等於    TRUE,若 $a 大於或等於 $b。    

如果比較一個數字和字串或比較涉及到數字內容的字串,則字串會被轉換為數值並且比較按照數值來進行。此規則也適用於 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;
}
?>

對於多種類型,比較運算符根據下表比較(按順序)。

比較多種類型

運算數1 型

運算數2 型

結果

null 或 string 結果

null 或 string 結果

null 或 string 結果

bool 或 null    任何其它類型   轉換為 bool,FALSE object    object    內建類別可以定義自己的比較,不同類別不能比較,相同類別和陣列相同方式比較屬性(PHP 4 中有),不同類別不能比較resource 或number    string,resource 或number    將字串和資源轉換成數字,依普通數學比較   

array    array    具有成員的數組較小,如果運算數1 中的鍵數不存在於數組中的數字組無法比較,否則挨個值比較(見下例)    

object    任何其它類型   object 總是更大   

array    

Warning:由於浮點數 float 的內部表現方式,不應比較兩個浮點數是否相等。


三元運算子

另一個條件運算子是「?:」(或三元)運算子 。

Example #2 賦預設值

<?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
}
?>

表達式 (expr1) ? (expr2) : (expr3) 在 expr1 求值為 TRUE 時的值為 expr2,在 expr1 求值為 TRUE 

自 PHP 5.3 起,可以省略三元運算子中間那部分。表達式 expr1 ?: expr3 在 expr1 求值為 TRUE 時回傳 expr1,否則回傳 expr3。

Note: 注意三元運算子是個語句,因此其求值不是變量,而是語句的結果。如果想透過引用回傳一個變數這點就很重要。在一個透過引用傳回的函數中語句 return $var == 42 ? $a : $b; 將不起作用,以後的 PHP 版本會為此發出警告。

Note:

建議避免將三元運算子堆積在一起使用。當在一條語句中使用多個三元運算子時會造成 PHP 運算結果不清晰:

Example #3 不清晰的三元運算子行為

<?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;];
 }
 ?>

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn