suchen

Heim  >  Fragen und Antworten  >  Hauptteil

php弱类型比较

var_dump(0) //int(0)
var_dump('0') //string(1) "0"
var_dump('ssddsd') //string(7) "sasadad"
var_dump(0=='sdfsdf') // bool(true)
var_dump('0'=='sdfsf') //bool(false)

在上面这些比较中为什么var_dump(0=='sdfsdf') // bool(true)而var_dump('0'=='sdfsf') //bool(false)
我认为的是0是整形,和字符型'sdfsf'比较应该是false。。。。

为什么实际结果却是相反的,我哪里理解错了么???

PHP中文网PHP中文网2897 Tage vor325

Antworte allen(7)Ich werde antworten

  • 黄舟

    黄舟2017-04-10 17:05:59

    var_dump(0=='sdfsdf')

    当处理这句时,不同类型比较'sdfsdf'会被强制转换成int型,也就是int 0,所以结果是true

    var_dump('0'=='sdfsf') 

    当处理这句时,相同类型比较直接比较内容,内容不一样,所以结果是false

    你可以试试var_dump((int)("sdfsf"));结果是int 0

    Antwort
    0
  • PHPz

    PHPz2017-04-10 17:05:59

    https://segmentfault.com/q/1010000000095573/a-1020000000098176

    至于后面那个为啥错误的… 这个还需要说明么… 判断相等首要的因素是内容要相等,只是 == 非严格模式会帮我们自动将两者的类型转换成一致的而已。字符串内容都不同你到底是为啥会觉得相等的…

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-10 17:05:59

    你理解错了。
    比较运算符直接的转换 是:整数和字符串比较,字符串转为整数,那么字符串sdfsdf就转为整数0了,所以第三条是true。
    第四条是true因为他们都是字符串,所以就直接比较了,那么字符串0和sdfsf自然不等,为false

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-10 17:05:59

    ==比较只比较值,不同类型会转换为同一类型比较。

    要比较类型用===,必须值和类型都一样才为true。

    这些官方文档里都有写的,请仔细阅读文档。

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-10 17:05:59

    var_dump(0=='sdfsdf'); 弱类型比较通常会先进行类型转换转为相同类型在进行值相等判断.
    其中字符串和数值的比较规则是字符串转换成数字. 所以上面那个比较实际的进行可看作

    var_dump(0 == (int)'sdfsdf');

    var_dump('0'=='sdfsf');两个都是字符串就是比较值是否相等.

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-10 17:05:59

    字符串和数字关键后会被转换成0,这样的现象在数据库中也会存在的

    Antwort
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 17:05:59

    http://php.net/manual/zh/language.operators.comparison.php
    如果比较一个数字和字符串或者比较涉及到数字内容的字符串,
    则字符串会被转换为数值并且比较按照数值来进行.此规则也适用于switch语句.
    当用===或!==进行比较时则不进行类型转换,因为此时类型和数值都要比对.

    PHP中字符串跟数字比较时,字符串会被转化为数字后进行比较,转化过程类似intval():

    echo intval('5stars');  输出5
    print_r('5stars'==5);   输出1
    var_dump('5stars'==5);  输出bool(true)
    var_dump('5stars'===5); 输出bool(false)
    var_dump('0e1'=='0e2');  输出bool(true)
    var_dump('0e1'==='0e2'); 输出bool(false)
    

    PHP中比较字符串应该用恒等于===或者strcmp.

    Antwort
    0
  • StornierenAntwort