【问题标题】:type casting and equal operator precedence in phpphp 中的类型转换和相等运算符优先级
【发布时间】:2023-02-09 19:01:44
【问题描述】:

为什么这两个语句输出的结果不同?
我能想到的唯一原因是operator precedence,它对于===== 看起来是一样的。

$a = (bool) 4 == 4;
$b = (bool) 4 === 4;

var_dump($a); // bool(true)
var_dump($b); // bool(false)

【问题讨论】:

  • 类型转换的优先级高于 ==。你在做true == 4
  • 它与类型杂耍有关。 == 使第二个 4 成为布尔值,因为前 4 个被制成布尔值。 === 不做任何杂耍,它只是比较。
  • @deceze 这很清楚。
  • @KIKOSoftware 看起来这就是我要找的答案。请把它变成一个答案。

标签: php operator-precedence


【解决方案1】:

是的,operator precedence===== 相同。显然这里的区别在于操作符本身。

首先我们必须承认,类型转换比这两个比较运算符具有更高的优先级。所以,实际上,你在做:

$a = (TRUE == 4);
$b = (TRUE === 4);

当您执行 == 时,您只是想看看这些值是否相等。只能比较相同类型的值。由于您从布尔值开始,因此数字 4 也将变成布尔值。这称为type juggling。我们已经知道 (bool)4TRUE。所以$a 一定是真的。

但是,当您执行 === 时,没有类型杂耍,相反,如果两个操作数具有相同的值,它只会返回 TRUE类型。由于布尔值与整数的类型不同$b 必须是FALSE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2012-08-10
    • 1970-01-01
    • 2017-07-04
    • 2018-04-02
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多