为啥“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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章