PHP (至少在 PHP 5.6.14 中)中有 没有 严格相同比较运算符(>== 或 <==),但有几种方法可以在检查大/小之前执行严格的类型检查:
- 用
if (gettype($a) === gettype($b))检查两种变量类型
- 强制您需要的类型转换,例如。
if ((string)$a === (string)$b)
- 强制您需要的类型杂耍,例如。
if (($a . '') === ($b . ''))
请注意:
-
Floating point precision有限
-
INF 和 NAN 在 ieee754 下属于 float
- 一些 Infinity 等于一些其他 Infinity(自 PHP 5.4 起)
- 科学记数法
e 始终是float 类型,并且永远不会是integer,即使数字很小
- 超过
PHP_INT_MAX 的整数会自动转换为float
- 在系统边界上的浮点数获得
INF 值
- 未定义变量的类型和值
NULL
-
0 前面的整数从八进制转换为十进制(按照约定)
- 将包含具有前导
0 的整数的字符串转换为到 整数去除前导0
一些奇特的比较列表:
很奇怪:
$一个VS。 $b $a>$b $a=$b $a==$b $a===$b
浮动(NAN)浮动(-INF)假假假假假假假
浮动(南)浮动(0)假假假假假假假
浮动(南) 浮动(1) 假假假假假假假
浮动(NAN) 浮动(INF) 假假假假假假
浮动(南) 浮动(南) 假假假假假假假
float(NAN) int(-1) 假假假假假假
float(NAN) int(0) 假 假 假 假 假 假
float(NAN) int(1) 假 假 假 假 假 假
相等但不相同:
$一个VS。 $b $a>$b $a=$b $a==$b $a===$b
NULL(NULL) array() 假 假 真 真 真 假
NULL(NULL) bool(false) false false true true true false
NULL(NULL) float(0) 假 假 真 真 真 假
NULL(NULL) int(0) 假 假 真 真 真 假
NULL(NULL) str('') false false true true true false
数组()布尔(假)假假真真真假
bool(false) float(0) false false true true true false
bool(false) int(0) false false true true true false
str('') bool(false) false false true true true false
bool(false) str('0') false false true true true false
float(-INF) bool(true) false false true true true false
bool(true) float(1) false false true true true false
浮动(INF)布尔(真)假假真真真假
float(NAN) bool(true) false false true true true false
bool(true) int(-1) false false true true true false
bool(true) int(1) false false true true true false
bool(true) str("\0") false false true true true false
bool(true) str('+') false false true true true false
bool(true) str('-') false false true true true false
bool(true) str('01') false false true true true false
bool(true) str('1') false false true true true false
bool(true) str('false') false false true true true false
str('text') bool(true) false false true true true false
str('true') bool(true) false false true true true false
int(0) float(0) false false true true true false
str("\0") float(0) false false true true true false
str('') float(0) 假 假 真 真 真 假
str('+') float(0) false false true true true false
str('-') float(0) false false true true true false
str('0') float(0) false false true true true false
str('false') float(0) false false true true true false
str('text') float(0) false false true true true false
str('true') float(0) false false true true true false
int(1) float(1) 假 假 真 真 真 假
float(1) str('01') 假 假 真 真 真 假
float(1) str('1') 假 假 真 真 真 假
str("\0") int(0) false false true true true false
str('') int(0) 假 假 真 真 真 假
str('+') int(0) false false true true true false
str('-') int(0) false false true true true false
int(0) str('0') false false true true true false
str('false') int(0) 假 假 真 真 真 假
str('text') int(0) false false true true true false
str('true') int(0) false false true true true false
int(1) str('01') 假 假 真 真 真 假
int(1) str('1') 假 假 真 真 真 假
str('1') str('01') false false true true true false
同时降低和提高?
$一个VS。 $b $a>$b $a=$b $a==$b $a===$b
float(NAN) str("\0") 真真真真假假
float(NAN) str('') true true true false false
float(NAN) str('+') true true true false false
float(NAN) str('-') true true true false false
float(NAN) str('0') true true true false false
float(NAN) str('01') true true true false false
float(NAN) str('1') true true true false false
float(NAN) str('false') true true true false false
float(NAN) str('text') true true true false false
float(NAN) str('true') true true true false false
相等且相同:
$一个VS。 $b $a>$b $a=$b $a==$b $a===$b
NULL(NULL) NULL(NULL) 假 假 真 真 真 真
浮动(-INF) 浮动(-INF) 假 假 真 真 真 真
浮动(INF)浮动(INF)假假真真真真真假
更低或更高:
$一个VS。 $b $a>$b $a=$b $a==$b $a===$b
NULL(NULL) bool(true) false true true false false false
float(-INF) NULL(NULL) 真假假真假假
NULL(NULL) float(1) 假真真假假假
浮动(INF) NULL(NULL) 真假假真假假
float(NAN) NULL(NULL) 真假假真假假
NULL(NULL) int(-1) false true true false false false
NULL(NULL) int(1) 假真真假假假
NULL(NULL) str("\0") false true true false false false
NULL(NULL) str('+') false true true false false false
NULL(NULL) str('-') false true true false false false
NULL(NULL) str('0') false true true false false false
NULL(NULL) str('01') false true true false false false
NULL(NULL) str('1') false true true false false false
NULL(NULL) str('false') false true true false false false
NULL(NULL) str('text') false true true false false false
NULL(NULL) str('true') false true true false false false
array() bool(true) false true true false false false
浮动(-INF)数组()假真真假假假假
数组()浮点(0)真假假真假假
数组()浮点数(1)真假假真假假
浮动(INF)数组()假真真假假假
浮动(NAN)数组()假真真假假假
array() int(-1) 真假假真假假
array() int(0) 真假假真假假
array() int(1) 真假假真假假
array() str("\0") 真假假真假假
str('') 数组() 假真真假假假
array() str('+') true false false true false false
array() str('-') true false false true false false
array() str('0') 真假假真假假
array() str('01') 真假假真假假
array() str('1') 真假假真假假
array() str('false') true false false true false false
array() str('text') true false false true false false
array() str('true') true false false true false false
bool(true) bool(false) true false false true false false
浮动(-INF)布尔(假)真假假真假假
float(1) bool(false) true false false true false false
浮动(INF)布尔(假)真假假假真假假
浮动(南)布尔(假)真假假假真假假
bool(false) int(-1) false true true false false false
int(1) bool(false) 真假假假真假假
bool(false) str("\0") false true true false false false
bool(false) str('+') false true true false false false
bool(false) str('-') false true true false false false
bool(false) str('01') false true true false false false
str('1') bool(false) true false false true false false
bool(false) str('false') false true true false false false
str('text') bool(false) true false false true false false
str('true') bool(false) true false false true false false
bool(true) float(0) true false false true false false
bool(true) int(0) true false false true false false
str('') bool(true) false true true false false false
bool(true) str('0') true false false true false false
浮动(-INF)浮动(0)假真真假假假
浮动(-INF)浮动(1)假真真假假假
浮动(INF)浮动(-INF)真假假真假假
float(-INF) int(-1) false true true false false false
float(-INF) int(0) false true true false false false
float(-INF) int(1) false true true false false false
float(-INF) str("\0") false true true false false false
float(-INF) str('') false true true false false false
float(-INF) str('+') false true true false false false
float(-INF) str('-') false true true false false false
float(-INF) str('0') false true true false false false
float(-INF) str('01') false true true false false false
float(-INF) str('1') false true true false false false
float(-INF) str('false') false true true false false false
float(-INF) str('text') false true true false false false
float(-INF) str('true') false true true false false false
浮动(1) 浮动(0) 真假假真假假
浮动(INF)浮动(0)真假假真假假
float(0) int(-1) 真假假假真假假
int(1) float(0) 真假假真假假
float(0) str('01') false true true false false false
str('1') float(0) 真假假真假假
浮动(INF)浮动(1)真假假真假假
float(1) int(-1) 真假假真假假
float(1) int(0) 真假假真假假
float(1) str("\0") 真假假真假假
str('') float(1) 假真真假假假
float(1) str('+') 真假假真假假
float(1) str('-') true false false true false false
float(1) str('0') 真假假真假假
float(1) str('false') 真假假假真假假
str('text') float(1) false true true false false false
str('true') float(1) false true true false false false
float(INF) int(-1) 真假假真假假
float(INF) int(0) 真假假假真假假
float(INF) int(1) 真假假真假假
float(INF) str("\0") 真假假真假假
float(INF) str('') 真假假假真假假
float(INF) str('+') 真假假真假假
float(INF) str('-') 真假假真假假
浮动(INF)str('0')真假假真假假
浮动(INF)str('01')真假假真假假
浮动(INF)str('1')真假假真假假
float(INF) str('false') 真假假真假假
浮动(INF)str('文本')真假假真假假
float(INF) str('true') 真假假真假假
int(0) int(-1) 真假假真假假
int(1) int(-1) 真假假真假假
str("\0") int(-1) 真假假真假假
str('') int(-1) 真假假真假假
str('+') int(-1) 真假假真假假
str('-') int(-1) true false false true false false
str('0') int(-1) 真假假真假假
int(-1) str('01') false true true false false false
str('1') int(-1) 真假假真假假
str('false') int(-1) 真假假真假假
str('text') int(-1) true false false true false false
str('true') int(-1) 真假假真假假
int(1) int(0) 真假假真假假
int(0) str('01') false true true false false false
str('1') int(0) 真假假真假假
int(1) str("\0") 真假假真假假
str('') int(1) 假真真假假假
int(1) str('+') 真假假真假假
int(1) str('-') 真假假真假假
int(1) str('0') 真假假真假假
int(1) str('false') 真假假真假假
str('text') int(1) false true true false false false
str('true') int(1) false true true false false false
str('') str("\0") false true true false false false
str('+') str("\0") true false false true false false
str('-') str("\0") true false false true false false
str("\0") str('0') false true true false false false
str("\0") str('01') false true true false false false
str('1') str("\0") 真假假真假假
str('false') str("\0") true false false true false false
str('text') str("\0") true false false true false false
str('true') str("\0") true false false true false false
str('') str('+') false true true false false false
str('') str('-') false true true false false false
str('') str('0') false true true false false false
str('') str('01') false true true false false false
str('') str('1') false true true false false false
str('') str('false') false true true false false false
str('') str('text') false true true false false false
str('') str('true') false true true false false false
str('-') str('+') 真假假真假假
str('+') str('0') false true true false false false
str('+') str('01') false true true false false false
str('1') str('+') 真假假真假假
str('false') str('+') true false false true false false
str('text') str('+') true false false true false false
str('true') str('+') true false false true false false
str('-') str('0') false true true false false false
str('-') str('01') false true true false false false
str('1') str('-') true false false true false false
str('false') str('-') true false false true false false
str('text') str('-') true false false true false false
str('true') str('-') true false false true false false
str('0') str('01') false true true false false false
str('1') str('0') 真假假真假假
str('false') str('0') true false false true false false
str('text') str('0') true false false true false false
str('true') str('0') true false false true false false
str('false') str('01') true false false true false false
str('text') str('01') true false false true false false
str('true') str('01') true false false true false false
str('1') str('false') false true true false false false
str('text') str('1') true false false true false false
str('true') str('1') true false false true false false
str('text') str('false') true false false true false false
str('true') str('false') true false false true false false
str('true') str('text') true false false true false false
$a > $b > $c 难题何时:$a 不大于 $c。
A<C : float(NAN) > str('a') > str('')
A<C : 浮点数(NAN) > str('a') > str('1')
A<C : 浮点数(NAN) > str('a') > str('A')
A<C : 浮点数(NAN) > str('a') > str('0')
A<C : 浮点数(NAN) > str('1') > str('')
A<C : 浮点数(NAN) > str('1') > str('0')
A<C : 浮点数(NAN) > str('A') > str('')
A<C : 浮点数(NAN) > str('A') > str('1')
A<C : 浮点数(NAN) > str('A') > str('0')
A<C : 浮点数(NAN) > str('0') > str('')
A<C : str('') > float(NAN) > str('a')
A<C : str('') > float(NAN) > str('1')
A<C : str('') > float(NAN) > str('A')
A<C : str('') > float(NAN) > str('0')
A<C : str('a') > str('') > float(NAN)
A<C : str('a') > str('1') > float(NAN)
A<C : str('a') > str('A') > float(NAN)
A<C : str('a') > str('0') > float(NAN)
A<C : str('0') > str('') > float(NAN)
A==C : bool(true) > str('') > float(NAN)
A==C : bool(true) > str('') > float(-INF)
A==C : bool(true) > str('') > int(-1)
A==C : bool(true) > str('') > float(-1)
A==C : bool(true) > array() > float(NAN)
A==C : bool(true) > array() > float(INF)
A==C : bool(true) > array() > float(-INF)
A==C : bool(true) > array() > str('a')
A==C : bool(true) > array() > int(1)
A==C : bool(true) > array() > float(1)
A==C : bool(true) > array() > str('1')
A==C : bool(true) > array() > str('A')
A==C : bool(true) > array() > int(-1)
A==C : bool(true) > array() > float(-1)
A==C : bool(true) > int(0) > float(-INF)
A==C : bool(true) > int(0) > int(-1)
A==C : bool(true) > int(0) > float(-1)
A==C : bool(true) > str('0') > float(NAN)
A==C : bool(true) > str('0') > float(-INF)
A==C : bool(true) > str('0') > int(-1)
A==C : bool(true) > str('0') > float(-1)
A==C : bool(true) > float(0) > float(-INF)
A==C : bool(true) > float(0) > int(-1)
A==C : bool(true) > float(0) > float(-1)
A==C : int(1) > str('a') > str('1')
A==C : int(1) > str('A') > str('1')
A==C : 浮点数(1) > str('a') > str('1')
A==C : 浮点数(1) > str('A') > str('1')
A==C : str('a') > str('1') > int(0)
A==C : str('a') > str('1') > float(0)
A==C : str('') > float(-INF) > NULL(NULL)
A==C : str('') > float(-INF) > bool(false)
A==C : str('') > int(-1) > NULL(NULL)
A==C : str('') > int(-1) > bool(false)
A==C : str('') > float(-1) > NULL(NULL)
A==C : str('') > float(-1) > bool(false)
A==C : 数组() > 浮点数(NAN) > NULL(NULL)
A==C:数组()>浮点(NAN)>布尔(假)
A==C:数组()>浮点(INF)> NULL(NULL)
A==C:数组()>浮点(INF)>布尔(假)
A==C:数组()>浮点(-INF)> NULL(NULL)
A==C:数组()>浮点(-INF)>布尔(假)
A==C : 数组() > str('a') > NULL(NULL)
A==C : 数组() > str('a') > bool(false)
A==C:数组()> int(1)> NULL(NULL)
A==C:数组()> int(1)> bool(假)
A==C : 数组() > 浮点数(1) > NULL(NULL)
A==C:数组()>浮点(1)>布尔(假)
A==C : 数组() > str('1') > NULL(NULL)
A==C : 数组() > str('1') > bool(false)
A==C : 数组() > str('A') > NULL(NULL)
A==C : 数组() > str('A') > bool(false)
A==C:数组()> str('0')> NULL(NULL)
A==C:数组()> int(-1)> NULL(NULL)
A==C:数组()> int(-1)> bool(假)
A==C:数组()>浮点(-1)> NULL(NULL)
A==C:数组()>浮点(-1)>布尔(假)
A==C : str('') > float(NAN) > bool(false)
A==C : str('') > float(NAN) > NULL(NULL)
A==C : str('A') > str('1') > int(0)
A==C : str('A') > str('1') > float(0)
A==C : int(0) > float(-INF) > NULL(NULL)
A==C : int(0) > float(-INF) > bool(false)
A==C : int(0) > int(-1) > NULL(NULL)
A==C : int(0) > int(-1) > bool(false)
A==C : int(0) > float(-1) > NULL(NULL)
A==C : int(0) > float(-1) > bool(false)
A==C : str('0') > float(NAN) > bool(false)
A==C : str('0') > float(-INF) > bool(false)
A==C : str('0') > int(-1) > bool(false)
A==C : str('0') > float(-1) > bool(false)
A==C : 浮点数(0) > 浮点数(-INF) > NULL(NULL)
A==C : 浮点数(0) > 浮点数(-INF) > bool(false)
A==C : 浮点数(0) > int(-1) > NULL(NULL)
A==C : 浮点数(0) > int(-1) > bool(false)
A==C : 浮点数(0) > 浮点数(-1) > NULL(NULL)
A==C : 浮点数(0) > 浮点数(-1) > bool(false)
A===C : str('0') > float(NAN) > str('0')
A===C : str('') > float(NAN) > str('')
A===C : str('a') > float(NAN) > str('a')
A===C : str('1') > float(NAN) > str('1')
A===C : str('A') > float(NAN) > str('A')
有趣的字符串比较:'Queen'>'King'>'Jack'>'Ace'
还可以查看PHP type comparison tables 覆盖对:
-
isset() 和 is_null()
-
if() 和 empty()
- 布尔值
== 与===
检查实时 PHP 版本之间的差异。 http://3v4l.org/MAfDu.