在php 7中我这样做了。输出应该是0,对吗?但是我得到了1.为什么?
<?php
echo "a"==0?1:0;
?>
答案 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