为什么我的不平等测试失败了?

时间:2011-10-24 08:48:37

标签: php

片状的Xdebug在mo' (正常服务将尽快恢复),所以我被简化为"通过echo"进行调试。

echo($path_info['filename'] . '    ' . $licence['issue_timestamp'].'<br>');      
if ($path_info['filename'] != $licence['issue_timestamp'])
{  
die('They are NOT equal');
   $_SESSION['error_messages'][] = 'This licence file has been copied';
   return False;
}
else   
die('They are equal');

输出

1319266557_   1319266557
They are equal

知道我做错了什么吗?关于(尾随)下划线有什么特别之处吗?

2 个答案:

答案 0 :(得分:5)

docs州:

  

$a != $b Not equal TRUE if $a is not equal to $b after type juggling.

那种“类型杂耍”看起来很可疑。在该页面的其他地方,它提到:

  

如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。这些规则也适用于switch语句。当比较为===!==时,不会进行类型转换,因为这涉及比较类型和值。

这个例子是关于你案件中发生的事情的遗言:

  

var_dump(100 == "1e2"); // 100 == 100 -> true

就字符串如何转换为整数而言,可以看到here。突出的是(我的大胆):

  

如果字符串不包含任何字符'。','e'或'E',并且数值适合整数类型限制(由PHP_INT_MAX定义),则字符串将被计算为整数。在所有其他情况下,它将被评估为浮动。

     

该值由字符串的初始部分给出。

     

示例:$foo = 1 + "10 Small Pigs"; // $foo is integer (11)

这就是“123_”等于“123”(a)的原因。最后一行,使用!==,因为这样可以确保值和类型相同。


(a)请参阅online PHP executorenter image description here

答案 1 :(得分:3)

PHP所做的一件令人头疼的事是== only compares values "after type juggling"。这意味着大多数理智的人认为==在PHP中真的是===。试试

$path_info['filename'] !== $licence['issue_timestamp'].