为什么"someString"== 0在PHP中评估为true

ste*_*son 2 php

truth在PHP中有点困惑.

我的理解是0计算为false,非空字符串(除非字符串为"0")计算为true.

这是我所期望的:

var_dump((bool) 0);              // prints "boolean false"
var_dump((bool) 'someString');   // prints "boolean true"
Run Code Online (Sandbox Code Playgroud)

但后来我对以下结果感到惊讶:

var_dump((0=='someString'));     // prints "boolean true"
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么0=='someString'评价为真?

Joh*_*nde 8

使用comparison(==)运算符时,与另一个整数相比,字符串将转换为整数.这是因为PHP中类型杂耍.因此, "someString"求值为零,因为它被转换为整数且没有前导数字.如果使用相同的operator(===)类型转换未完成,"someString"则处理文字字符串,然后您的语句将评估为false.

执行类型杂耍时,以下内容将评估为false.其他所有内容都将被评估为真:

  • ""(空字符串)
  • 0(0为整数)
  • 0.0(0作为浮点数)
  • "0"(0作为字符串)
  • 空值
  • array()(一个空数组)
  • 是$ var; (声明的变量,但没有值)