PHP判断和比较null、0、''、false的正确姿势
以下的表格显示了PHP类型和比较运算符在松散和严格比较时的作用。
在使用这些表格之前,需要明白变量类型及它们的意义。例如,"42"是一个字符串而42是一个整数。FALSE是一个布尔值而"false"是一个字符串。
HTML表单并不传递整数、浮点数或者布尔值,它们只传递字符串。要想检测一个字符串是不是数字,可以使用is_numeric()函数。
在没有定义变量$x的时候,诸如if($x)的用法会导致一个E_NOTICE级别的错误。所以,可以考虑用empty()或者isset()函数来初始化变量。
1使用PHP函数对变量$x进行比较
| 表达式 | gettype() | empty() | is_null() | isset() | boolean:if($x) |
|---|---|---|---|---|---|
| $x=""; | string | TRUE | FALSE | TRUE | FALSE |
| $x=null; | NULL | TRUE | TRUE | FALSE | FALSE |
| var$x; | NULL | TRUE | TRUE | FALSE | FALSE |
| $xisundefined | NULL | TRUE | TRUE | FALSE | FALSE |
| $x=array(); | array | TRUE | FALSE | TRUE | FALSE |
| $x=false; | boolean | TRUE | FALSE | TRUE | FALSE |
| $x=true; | boolean | FALSE | FALSE | TRUE | TRUE |
| $x=1; | integer | FALSE | FALSE | TRUE | TRUE |
| $x=42; | integer | FALSE | FALSE | TRUE | TRUE |
| $x=0; | integer | TRUE | FALSE | TRUE | FALSE |
| $x=-1; | integer | FALSE | FALSE | TRUE | TRUE |
| $x="1"; | string | FALSE | FALSE | TRUE | TRUE |
| $x="0"; | string | TRUE | FALSE | TRUE | FALSE |
| $x="-1"; | string | FALSE | FALSE | TRUE | TRUE |
| $x="php"; | string | FALSE | FALSE | TRUE | TRUE |
| $x="true"; | string | FALSE | FALSE | TRUE | TRUE |
| $x="false"; | string | FALSE | FALSE | TRUE | TRUE |
2松散比较==
3严格比较===
| TRUE | FALSE | 1 | 0 | -1 | "1" | "0" | "-1" | NULL | array() | "php" | "" | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TRUE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| 1 | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| 0 | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| -1 | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| "1" | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| "0" | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE |
| "-1" | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE |
| NULL | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE |
| array() | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE |
| "php" | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE |
| "" | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE |
参考资料:
- PHP类型比较表