为啥“someString”== 0 在 PHP 中评估为 true [重复]

Posted

技术标签:

【中文标题】为啥“someString”== 0 在 PHP 中评估为 true [重复]【英文标题】: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" 会因为它是数字比较。 【参考方案1】:

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

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

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

【讨论】:

这是关于转换为整数,而不是布尔值。 == 确实转换为整数,这就是这个答案的重点。 转换为整数是布尔结果的原因。

以上是关于为啥“someString”== 0 在 PHP 中评估为 true [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥不能像这样复制char数组 charArray="some string";

为啥 4 不是 Number 的实例?

为啥 4 不是 Number 的实例?

Qt4 中的 PHP unpack() 模拟函数

IIS 7完全禁用缓存

Java contains 无法按预期工作,因为 "someString" != "someString"