【问题标题】:How can comparing string to zero be true?如何将字符串与零进行比较是真的?
【发布时间】: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


【解决方案1】:

简单

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

字符串“some”被转换为整数以便与整数进行比较,在这种情况下将被转换为0。

0 == 0 是真的

如果将字符串“13 monkeys”转换为整数,则其值为13

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

13 == 0 是假的

将字符串转换为数字的规则在PHP docs中进行了解释

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-14
    • 2012-10-06
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多