有人可以向我解释为什么这些代码会返回" TRUE"。 我知道我应该使用" ==="相反" =="但我跑到这个代码,并想知道为什么它返回到真。提前谢谢。
<?php
$s = "final";
$i = 0;
if($s == $i){
echo "TRUE";
}else{
echo "FALSE";
}
答案 0 :(得分:5)
当您尝试比较字符串和数字时,解释器会将您的字符串转换为int,因此您在最终时得到0 == 0。这就是为什么string == 0
是真的。
答案 1 :(得分:1)
这只是PHP中实现的loose comparisons的属性。我不会在这背后寻找更多的逻辑而不是这是给定的。
答案 2 :(得分:1)
你可以在&#34;松散的比较中看到==&#34;将数字0与包含文本的字符串(&#34; php&#34;在示例中)进行比较的表评估为TRUE
。
答案 3 :(得分:1)
如上所述,这是一个与php进行宽松比较的问题。 php string comparasion to 0 integer returns true?上接受的答案解释得很好恕我直言。简而言之&#34; ==&#34;尝试将您的字符串转换为int,并且由于它失败,结果int的值为0
答案 4 :(得分:1)
如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串转换为数字,比较以数字方式执行。
来自PHP string conversion to numbers:
该值由字符串的初始部分给出。如果字符串以有效数字数据开头,则这将是使用的值。否则,值将为0(零)。
因此,当您比较整数和字符串时,PHP会尝试首先将字符串转换为整数,并将&#34; final&#34;不包含任何有效的数字数据,它将转换为0。
您可以尝试:
var_dump( intval('12final') ); //int(12)
var_dump( floatval('1.2final') ); //float(1.2)
这是因为12final
和1.2final
都以有效数字数据(12
和1.2
重新开始)开头,其转换值不为0.