【问题标题】:Why zero (0) and string are the same in PHP?为什么零 (0) 和字符串在 PHP 中是相同的?
【发布时间】:2015-02-14 16:19:48
【问题描述】:
<?php

// your code goes here
if (0 == "asdf")
    echo "same";
else
    echo "not same";

你好,为什么这段代码打印“相同”,而不是“不同”?我对这个奇怪的结果有点困惑。这是一个错误吗?

执行结果:见http://ideone.com/wfWRlq

【问题讨论】:

标签: php


【解决方案1】:

不,这不是刚刚得到的字符串转换为 int 的错误。它将它从左到右转换,直到一个非数值。因此,由于一开始就有一个非数值,所以它被转换为 0。

有关 String to int 的更多信息,请参阅手册:http://php.net/manual/de/language.types.string.php#language.types.string.conversion

还有一段话:

该值由字符串的初始部分给出。如果字符串以有效的数字数据开头,这将是使用的值。 否则,该值为 0(零)。

所以作为一个例子来说明:

echo "5xyz" + 5;  // 5 + 5 -> 10
    //^
echo "xyz5" + 5;  // 0 + 5 -> 5
       //^
echo "x5z"  + 5;  // 0 + 5 -> 5
     //^

【讨论】:

  • "asdf" == 0 也返回 true :)
【解决方案2】:

您应该使用===。因为那确实转换了值的类型。

【讨论】:

    【解决方案3】:

    这是 PHP 中比较不直观的行为之一。 == 运算符用于松散比较,仅检查给定变量的值,=== 运算符用于严格比较,还检查变量类型。 PHP手册有dedicated page with comparisons tables

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多