片状的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
知道我做错了什么吗?关于(尾随)下划线有什么特别之处吗?
答案 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 executor:
答案 1 :(得分:3)
PHP所做的一件令人头疼的事是==
only compares values "after type juggling"。这意味着大多数理智的人认为==
在PHP中真的是===
。试试
$path_info['filename'] !== $licence['issue_timestamp'].