代码之家  ›  专栏  ›  技术社区  ›  user9059272

嵌套空合并运算符(?)是如何实现的在PHP中工作?需要逐步解释执行流程

  •  2
  • user9059272  · 技术社区  · 8 年前

    我正在使用 PHP 7.2.0

    我已经了解了 空合并运算符(??) 但我无法理解when null合并操作符(?)的执行流程和功能是嵌套的。

    请考虑下面的代码示例,并逐步向我解释执行流程。

    <?php
    
    $foo = null;
    $bar = null;
    $baz = 1;
    $qux = 2;
    
    echo $foo ?? $bar ?? $baz ?? $qux; // outputs 1
    
    ?>
    
    3 回复  |  直到 8 年前
        1
  •  5
  •   Philipp    8 年前

    我认为,如果您在空合并操作符的单个步骤周围添加paren,您的示例将变得更清晰。

    echo ($foo ?? ($bar ?? ($baz ?? $qux)));
    

    基本上,这与从左到右执行是一样的。

    空合并运算符是右关联的。这意味着操作是从右到左分组的。一、 e,表达式 a ?? b ?? c 评估为 a ?? (b ?? c) .

        2
  •  1
  •   user9059272 user9059272    8 年前

    它的工作方式与其基本用法类似。

    执行流程如下:

    1. It检查 isset($foo) 尚未设置,它包含 NULL 所以,继续 $bar
    2. It检查 isset($bar) 还没有设置,太复杂了 无效的 所以,继续 $baz
    3. It检查 isset($baz) 已设置,它包含值 1 所以,它被打印出来,执行停止。
        3
  •  1
  •   AndrewRMillar Ankit    6 年前

    您可以在一系列if/elseif/else语句中转换null合并运算符。以您为例:

    echo $foo ?? $bar ?? $baz ?? $qux; // outputs 1
    

    转换为if/else语句:

    <?php
    $foo = null;
    $bar = null;
    $baz = 1;
    $qux = 2;
    
    if (isset($foo)) {
       echo $foo;
    }
    else if (isset($bar)) {
       echo $bar;
    }
    else if (isset($baz)) {
       echo $baz;
    } 
    else { 
        echo $qux;
    }
    

    就个人而言,我非常谨慎地使用空合并运算符,嵌套它似乎是一种灾难。

    空合并操作符(除了有一个非常讨厌的名称外)并不能提高代码的可读性。我认为,在阅读代码时,为数不多的几行代码是不值得的。或者值得让其他人在阅读/理解您的代码时遇到困难。所以,对你的程序员同伴来说,做一个好的程序员,尽量少用null合并操作符 从不 嵌套它。