PHP类型juggling,“String”== 0和“String”== true

时间:2014-02-18 21:02:02

标签: php

我有一个非常简单的问题。在PHP中,

if ('abc' == 0){
    //true
}
if ('abc' == 1){
    //false
}

我知道this页面告诉我们它应该是那样的。但是,我发现它很奇怪。另外,

if ('abc' == true){
    //true
}
if ('abc' == false){
    //false
}

这两次转换背后的逻辑是什么?

2 个答案:

答案 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”规则适合。