【问题标题】:Why does "someString" == 0 evaluate to true in PHP [duplicate]为什么“someString”== 0 在 PHP 中评估为 true [重复]
【发布时间】:2014-01-05 12:45:55
【问题描述】:

我对 PHP 中的 truth 有点困惑。

我的理解是0计算为假,非空字符串(除非字符串为“0”)计算为真。

正如我所料:

var_dump((bool) 0);              // prints "boolean false"
var_dump((bool) 'someString');   // prints "boolean true"

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

var_dump((0=='someString'));     // prints "boolean true"

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

【问题讨论】:

  • Nanne - 我了解这些运营商之间的区别。这是一个关于如何在== 不同类型的比较中评估真/假的问题。不同的国际海事组织。
  • php 是一种软类型语言,它可以即时转换类型 0 既可以是字符串也可以是整数,具体取决于它的使用位置,无需进行任何更改
  • 标题中的错误。"someString" == 0 不会评估为 true,因为它是字符串比较,但 0=="somestring" 会因为它是数字比较。

标签: php


【解决方案1】:

当使用比较 (==) 运算符时,字符串与另一个整数比较时将转换为整数。这是因为type juggling in PHP。所以"someString" 的计算结果为零,因为它被转换为整数并且没有前导数字。如果您使用相同的运算符 (===),则不会进行类型转换,因此 "someString" 将被视为文字字符串,然后您的语句将评估为 false。

当执行类型杂耍时,以下将评估为 false。其他一切都将被评估为真:

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

【讨论】:

  • 这是关于转换为整数,而不是布尔值。
  • == 确实转换为整数,这就是这个答案的重点。
  • 转换为整数是布尔结果的原因。
猜你喜欢
  • 2013-09-02
  • 1970-01-01
  • 2013-11-11
  • 2019-04-24
  • 2013-05-03
  • 1970-01-01
  • 2014-06-17
  • 2019-05-24
  • 2015-03-15
相关资源
最近更新 更多