为什么在PHP中字符串等于整数0?

时间:2018-11-12 07:02:01

标签: php codeigniter

在php 7中我这样做了。输出应该是0,对吗?但是我得到了1.为什么?

 <?php
     echo "a"==0?1:0;
    ?>

2 个答案:

答案 0 :(得分:7)

“ a” == 0等于true。

因为任何string is converted into an integer when compared with an integer。如果PHP无法正确转换字符串,则将其评估为0。因此0等于0,等于true。

如果您希望答案为0

您应该使用===而不是==

因为普通运算符不会比较类型。相反,它将尝试对项目进行类型转换。

同时===考虑项目类型。

===表示“等于”,

==表示“ eeeeh ..有点像”

此外,用于比较的PHP手册http://au.php.net/manual/en/language.operators.comparison.php

// double equal will cast the values as needed followin quite complex rules
0 == '0' // true, because PHP casted both sides to numbers

// triple equals returns true only when type and value match
0 === '0' // false

仅供参考,摘自PHP手册:

字符串转换为数字

  

在数字上下文中评估字符串时,结果值和类型的确定如下。

     

如果该字符串包含任何字符“。”,“ e”或“ E”,则将被视为浮点型。否则,它将被评估为整数。

     

该值由字符串的初始部分给出。如果字符串以有效的数字数据开头,则将是使用的值。否则,该值为0(零)。有效数字数据是可选的符号,后跟一个或多个数字(可选地包含小数点),后跟可选的指数。指数是一个“ e”或“ E”,后跟一个或多个数字。

答案 1 :(得分:1)

php7文档正在解释所有情况here。 还要说明你的例子。

var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true