我有一个非常简单的问题。在PHP中,
if ('abc' == 0){
//true
}
if ('abc' == 1){
//false
}
我知道this页面告诉我们它应该是那样的。但是,我发现它很奇怪。另外,
if ('abc' == true){
//true
}
if ('abc' == false){
//false
}
这两次转换背后的逻辑是什么?
答案 0 :(得分:4)
转化1
进行字符串和整数比较时,首先将字符串转换为整数,然后进行比较。由于这些字符串中没有前导整数,因此它们会转换为零。
转换2
任何非空字符串值都是布尔值true。
来自the manual:
The following things are considered to be empty:
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)
另请参阅:Type Comparisons
答案 1 :(得分:1)
可以找到相关表格here。重要的是两个操作数的类型,基于将转换一个或两个值。
在您的第一种情况下,双方的规则是“字符串,资源或数字”是第一个适用的规则,规则是“将字符串和资源转换为数字,通常的数学“
对于第二个例子,“将双方转换为bool,FALSE< TRUE”规则适合。