比較運算子(Comparison Operator)
比較運算子會將左右的值進行比較,最後回傳一個值,告知比較結果
範例 | 名稱 | 說明 |
---|---|---|
$a == $b | 相等 | 如果$a和$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小於$b則為TRUE |
$a > $b | 大於 | 如果$a大於$b則為TRUE |
$a <= $b | 小於等於 | 如果$a小於等於$b則為TRUE |
$a >= $b | 大於等於 | 如果$a大於等於$b則為TRUE |
$a <=> $b | 比較 | 如果$a<=$b則回傳-1,如果左右相等回傳0,如果$a=>$b則回傳1 |
$a <=> $b 是PHP 7新增的比較運算子
由於資料型別一共有8種,一次取2種做比較,所以全部有28種組合
而各種型別進行比較時,會根據以下的規則來做處理,情況重疊時以較上方的規則為準:
型別1 | 型別2 | 結果 |
---|---|---|
數字形式字串 | 數字形式字串 | 轉為數字進行比較 。 |
字串 | 字串 | 以字串內容進行比較 。 |
字串 | NULL | NULL轉為空字串""進行比較 。 |
布林 | 任何型別 | 轉為布林進行比較,且FALSE < TRUE。 |
物件 | 物件 | 不同類別無法比較,相同類別在PHP4比較方式和陣列一樣,在PHP5中更為複雜,在之後的章節再做討論。 |
實作toString物件 | 任何型別 | 以toString()結果字串進行比較,與字串比較規則相同。 |
物件 | 字串 | 物件永遠比較大。 |
陣列 | 陣列 | 陣列必須有相同Key的元素才能比較,會逐值比較。 |
陣列 | 任何型別 | 陣列永遠比較大。 |
數字 | 任何型別 | 轉為數字進行比較。 |
讓我們用var_dump
看一下比較的情況
<?php
var_dump(0 == "a"); // bool(true), 轉為數字當作 0 和 0
var_dump(0 === "a"); // bool(false) 型別不同
var_dump(0 === "0"); // bool(false) 型別不同
var_dump("1" != "01"); // bool(false), 轉為數字當作 1 和 1
var_dump("10" <> "1e1"); // bool(false), 轉為數字當作 10 和 10
var_dump(100 != "1e2"); // bool(false), 轉為數字當作 100 和 100
var_dump(100 !== "1e2"); // bool(true), 型別不同
?>