【问题标题】:PHP: Strange behaviour with variable assignmentPHP:变量赋值的奇怪行为
【发布时间】:2015-04-01 01:17:27
【问题描述】:

我声明了一个 var $t 并将其赋值为 0。然后我将 $t 重新赋值为 test。然后看起来$t 既是0 又是test。代码如下:

$t = 0;
$t = "test";

if($t == 0 && $t == "test"){
    echo "unexpected";
}else{
    echo "expected";
}

输出是:

"unexpected"

有人可以解释一下这里发生了什么吗? $t 真的是两个不同的值(0test)同时还是我错过了什么?

【问题讨论】:

  • 我不知道为什么,但是如果您只编写代码: $t = 'test'; if($t == 0) {echo 'yes';} 它回显是。显然,字符串的计算结果与 0 相同。
  • 很高兴知道,谢谢@GauravDave

标签: php variables


【解决方案1】:

这种“奇怪”的行为是由于 PHP 的类型杂乱造成的。由于您使用松散比较== 与整数0 进行比较,因此字符串test 被转换为整数,从而导致转换为0。请参阅Loose comparison == 表。在字符串php 所在的行中,您会看到它等于整数0,适用于所有字符串。
您应该使用严格(类型)比较运算符,即===

【讨论】:

    【解决方案2】:

    您没有附加或连接,所以不应该这样。请尝试使用相同的比较运算符。

    if($t === 0 && $t === "test"){
       ....
    }
    

    【讨论】:

      【解决方案3】:

      PHP 手册状态:

      该值由 > 字符串的初始部分给出。如果字符串以有效的数字 >data 开头,这将是使用的值。否则,> 值将为 0(零)。有效的数字数据是 > 可选符号,后跟一个或多个数字 >(可选包含小数点),> 后跟可选指数。 >exponent 是一个 'e' 或 'E' 后跟一个或 > 多个数字。

      http://il.php.net/manual/en/language.types.string.php#language.types.string.conversion

      所以$t == 0 是真的。你必须使用严格比较===

      【讨论】:

        【解决方案4】:

        嘿伙计,使用“===”运算符进行比较。

        在php中我们可以给一个简单的变量赋值,它包含数字、浮点数、字符、字符串等。

        因此,始终使用“===”运算符进行唯一或相同的值匹配。

        【讨论】:

          猜你喜欢
          • 2016-06-01
          • 2012-12-16
          • 2011-04-08
          • 1970-01-01
          • 1970-01-01
          • 2012-12-15
          • 1970-01-01
          • 2018-09-01
          相关资源
          最近更新 更多