【发布时间】:2015-03-23 11:36:21
【问题描述】:
php -a
Interactive shell
php > var_dump("some" == 0);
bool(true)
php > var_dump("some" == false);
bool(false)
php > var_dump("some" == true);
bool(true)
php > var_dump(false == 0);
bool(true)
我的问题很简单。 ("some" == 0) === true 背后的原因是什么?我知道由于弱类型,操作数被转换为可比较的东西。但在这个特定的例子中,它与我的理解背道而驰。
如果将零转换为字符串,它将是:
php > var_dump("some" == "0");
bool(false)
如果转换为布尔型,则为:
php > var_dump("some" == false);
bool(false)
唯一合理的解释是:
php > var_dump(intval("some"));
int(0)
php > var_dump(intval("some") == 0);
bool(true)
但这肯定不是我或任何人所期望的。尤其是因为任何字符串都会变成零(这在任何比较中都可能意味着错误)。
为什么会这样?
更新:
我的问题更多的是关于“为什么”而不是“如果”或“如何”,如果这不是很明显,抱歉。我想我在Why PHP casts two numerical strings to numbers before [loosely] comparing them?找到了我的答案
【问题讨论】:
-
您是否尝试过阅读手册? php.net/manual/en/types.comparisons.php
-
松散打字RTFM
标签: php