将两个字符串与==和strcmp进行比较

时间:2015-05-25 13:46:23

标签: php string

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 ';

Online Code

为什么所有条件都是真的?真的(string)$test等于“1”?

但是当使用strcmp($test,"00000000000000000000000000000001")时,这个正确的reutrn 0和strcmp($test,"1")返回-1?

为什么?

3 个答案:

答案 0 :(得分:6)

==(和!=)并不仅仅比较该类型的值。

由于'00001'是一个字符串而1是一个int,因此这些转换为相同的类型以进行比较。

在这种情况下,'00001'将转换为int - 11 == 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)

Docdoc

在类型杂耍之后

==进行比较。 ===也比较了类型。