【问题标题】:PHP: Compare Integer/String Variable with NullPHP:将整数/字符串变量与 Null 进行比较
【发布时间】:2013-01-17 07:05:31
【问题描述】:

我有一个整数/字符串变量。如果我在 mysqli 语句中有错误,它会变成 String 并且没有错误它会变成 affected rows 的数字(Integer)。

但是在 PHP 中,如果我们有这样的东西:

$i = 0;
if ( $i < 0 || $i == null ) {
    var_dump($i);
}

我们有这个结果:

int 0

首先,我想知道为什么会这样? (我的意思是,如果 var_dumpint 0,为什么 if 语句不起作用?)

第二,我想要解决方案来进行比较。

【问题讨论】:

  • 因为0被认为是空的(NULL
  • 使用类型安全比较:=== null
  • @PeterSzymkowski 很好的例子。

标签: php string comparison integer


【解决方案1】:

您没有进行严格的比较。 使用=== 而不是==

== 会转换类型然后比较

请改用以下其中一种。 is_null 是最干净的 IMO。

if ( $i < 0 || $i === null ) {..}

if ( $i < 0 || is_null($i)) {..}

【讨论】:

    【解决方案2】:

    您正在比较0 == null 是否相等,而不是identical,根据documentation 相同:

    以下内容被认为是空的:

    "" (一个空字符串)
    0(0 为整数)
    0.0(0 作为浮点数)
    "0" (0 作为字符串)
    空值
    错误的
    array() (一个空数组)
    $var; (声明的变量,但没有值)

    【讨论】:

      【解决方案3】:

      那是因为你使用了==。并且只要一个操作数是 null - 然后另一个操作数就会隐式转换为布尔值 0 -> false

      http://php.net/manual/en/language.operators.comparison.php

      bool 或 null 任何东西 转换为 bool,FALSE

      【讨论】:

        【解决方案4】:

        你需要比较类型

        var_dump($i == null); //true
        var_dump($i === null); //false
        

        你可以使用

        $i = 0;
        if ( $i < 0 || $i === null ) {
            var_dump($i);
        }
        

        【讨论】:

          【解决方案5】:

          使用 === 比较器

          if ( $i < 0 || $i === null ) { var_dump($i); }

          【讨论】:

          • comparator - 你从哪里得到这样的词? :-S 它是一个“运算符”,“比较器”通常是传递给排序函数的比较函数
          • 英语不是我的第一语言...我想我只是将Comparison Operators 混为一个单词。
          • 其实不是英语,而是编程术语
          【解决方案6】:

          使用is_null() 函数。

          if ( $i < 0 || is_null($i) ) {
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-03-17
            • 1970-01-01
            • 2016-01-16
            • 1970-01-01
            • 2015-10-03
            • 1970-01-01
            • 2015-11-21
            相关资源
            最近更新 更多