Php代码
$test='00000000000000000000000000000001';
if($test==1)
echo 'yes1 ';
if($test=="1")
echo 'yes2 ';
if((string)$test==1)
echo 'yes3 ';
if((string)$test=="1")
echo 'yes4 ';
if((string)$test=="00000000000000000000000000000001")
echo 'yes5 ';
为什么所有条件都是真的?真的(string)$test
等于“1”?
但是当使用strcmp($test,"00000000000000000000000000000001")
时,这个正确的reutrn 0和strcmp($test,"1")
返回-1?
为什么?
答案 0 :(得分:6)
==
(和!=
)并不仅仅比较该类型的值。
由于'00001'
是一个字符串而1
是一个int,因此这些转换为相同的类型以进行比较。
在这种情况下,'00001'
将转换为int - 1
。 1 == 1
是真的。
为了与类型完全匹配,您应该使用===
和!==
。
答案 1 :(得分:3)
请阅读有关php类型杂耍的内容。它在那里解释。 http://php.net/manual/en/language.types.type-juggling.php
同时查看比较运算符。 http://php.net/manual/en/language.operators.comparison.php
答案 2 :(得分:1)