PHP类型的杂耍;字符串";==0及「;字符串";==真的

PHP类型的杂耍;字符串";==0及「;字符串";==真的,php,Php,我有一个非常简单的问题。在PHP中 if ('abc' == 0){ //true } if ('abc' == 1){ //false } 我知道那页告诉我们应该是这样的。但是,我觉得很奇怪。另外, if ('abc' == true){ //true } if ('abc' == false){ //false } 这两种转换背后的逻辑是什么?转换1 进行字符串和整数比较时,首先将字符串转换为整数,然后进行比较。因为这些字符串中没有前导整数,所以它们转换为

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

if ('abc' == 0){
    //true
}
if ('abc' == 1){
    //false
}
我知道那页告诉我们应该是这样的。但是,我觉得很奇怪。另外,

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

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

转换1

进行字符串和整数比较时,首先将字符串转换为整数,然后进行比较。因为这些字符串中没有前导整数,所以它们转换为零

转换2

任何非空字符串值都是布尔真值

发件人:

以下内容被认为是空的:
“”(空字符串)
0(0作为整数)
0.0(0作为浮点数)
“0”(0作为字符串)
无效的
错误的
array()(空数组)
$var;(声明了一个变量,但没有值)

另请参见:

可以找到相关表格。两个操作数的类型很重要,因为一个或两个值都将被转换

在第一种情况下,双方的规则都是“字符串、资源或数字”,这是第一个适用的规则,规则是“将字符串和资源转换为数字,常用数学”


对于第二个例子,“将两边都转换为bool,FALSE在这里解释,我通过使用严格的比较(
==
)和打字(
$foo=(int)$\u POST[“bar”];
)来避免这种混乱。还有:-D