如何将字符串与零比较为真?

时间:2015-03-23 11:36:21

标签: php

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)

如果它被转换为bool,那将是:

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?

找到了答案

1 个答案:

答案 0 :(得分:3)

Simples

php > var_dump("some" == 0);

字符串" some"被强制转换为整数以与整数进行比较,在这种情况下将被强制转换为0

0 == 0是真的

如果字符串" 13只猴子"被强制转换为整数,它的值为13

php > var_dump("13monkeys" == 0);

13 == 0是假的

PHP docs

中说明了将字符串转换为数字的规则