2012-07-15 77 views
5

我使用'=='做了一些字符串测试。我知道比较字符串'=='不是方式,但是我想解决一个奇怪的行为。使用'=='的PHP字符串比较

我正在关注本页面中的PHP文档:http://www.php.net/manual/en/language.operators.comparison.php。这是测试我做

<?php 
    var_dump("100" == "1e2"); //outputs boolean true 
    var_dump((int) "100"); //int 100 
    var_dump((int) "1e2"); //int 1 
?> 

文档说,当我们比较数字的字符串,PHP首先将字符串转换为数字,但是当我将“100”和“1E2”为数字,他们是不相等的。比较结果应该输出boolean false。

为什么这种奇怪的行为?谢谢!

+0

顺便说一句,这就是为什么通常最好使用'==='而不是'==',因为结果更具可预测性! – 2012-07-15 05:07:38

回答

6

并非所有的数字都是整数。 1e2是一个浮点数(恰好可以表示为一个整数,但不是直接可转换为整数)。尝试转换为float真是让人不是int S:

<?php 
    var_dump("100" == "1e2"); // bool(true) 
    var_dump((float) "100"); // float(100) 
    var_dump((float) "1e2"); // float(100) 
?> 
+1

为了扩大这一点,这里是文档中的解释。 http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion“如果字符串不包含任何'。','e'或' E'并且数字值适合整数类型限制(由PHP_INT_MAX定义),则字符串将被评估为整数,在所有其他情况下,它将被评估为浮点数。 – 2012-07-15 05:07:26

1

Type Juggling如果操作数是浮点数,则两个操作数都计算不等于Type Casting

从类型戏法页面

作为花车,结果将是一个浮动。否则,操作数将被解释为整数,结果也将是一个整数。