PHP:与“==”运算符混淆

时间:2014-11-28 09:04:18

标签: php

有人可以向我解释为什么这些代码会返回" TRUE"。 我知道我应该使用" ==="相反" =="但我跑到这个代码,并想知道为什么它返回到真。提前谢谢。

<?php
    $s = "final";
    $i = 0;
    if($s == $i){
        echo "TRUE";
    }else{
        echo "FALSE";
    }

5 个答案:

答案 0 :(得分:5)

当您尝试比较字符串和数字时,解释器会将您的字符串转换为int,因此您在最终时得到0 == 0。这就是为什么string == 0是真的。

答案 1 :(得分:1)

这只是PHP中实现的loose comparisons的属性。我不会在这背后寻找更多的逻辑而不是这是给定的。

答案 2 :(得分:1)

查看PHP comparison tables

你可以在&#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 comparison operators

如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串转换为数字,比较以数字方式执行

来自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)

这是因为12final1.2final都以有效数字数据(121.2重新开始)开头,其转换值不为0.