Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套空合并操作符(?)在PHP中是如何工作的?需要逐步解释执行流程_Php_Nested_Php 7_Execution_Null Coalescing Operator - Fatal编程技术网

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

嵌套空合并操作符(?)在PHP中是如何工作的?需要逐步解释执行流程,php,nested,php-7,execution,null-coalescing-operator,Php,Nested,Php 7,Execution,Null Coalescing Operator,我使用的是PHP7.2.0 我已经了解了空合并运算符(?)的正常基本用法,但我无法理解嵌套空合并运算符(?)时的执行流程和功能 请考虑下面的代码示例,并以逐步的方式解释我的执行流程。< /P> <?php $foo = null; $bar = null; $baz = 1; $qux = 2; echo $foo ?? $bar ?? $baz ?? $qux; // outputs 1 ?> 如果您在空合并运算符的单个步骤周围添加paren,我认为您的示例会更清晰 ech

我使用的是PHP7.2.0

我已经了解了空合并运算符(?)的正常基本用法,但我无法理解嵌套空合并运算符(?)时的执行流程和功能

请考虑下面的代码示例,并以逐步的方式解释我的执行流程。< /P>

<?php

$foo = null;
$bar = null;
$baz = 1;
$qux = 2;

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

?>

如果您在空合并运算符的单个步骤周围添加paren,我认为您的示例会更清晰

echo ($foo ?? ($bar ?? ($baz ?? $qux)));
基本上,它与从左到右执行相同


空合并运算符是右关联的。这意味着操作是从右向左分组的。也就是说,表达式
a??Bc
被评估为
a??(b??c)

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

echo ($foo ?? ($bar ?? ($baz ?? $qux)));
基本上,它与从左到右执行相同


空合并运算符是右关联的。这意味着操作是从右向左分组的。也就是说,表达式
a??Bc
被评估为
a??(b??c)

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

执行流程如下所示:

  • 它检查
    isset($foo)
    它没有被设置,它包含
    NULL
    所以,选择
    $bar
  • 它检查
    isset($bar)
    它没有被设置,它也包含
    NULL
    所以,选择
    $baz
  • 它检查
    isset($baz)
    它已被设置,它包含值
    1
    ,因此它被打印并停止执行

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

    执行流程如下所示:

  • 它检查
    isset($foo)
    它没有被设置,它包含
    NULL
    所以,选择
    $bar
  • 它检查
    isset($bar)
    它没有被设置,它也包含
    NULL
    所以,选择
    $baz
  • 它检查
    isset($baz)
    它已被设置,它包含值
    1
    ,因此它被打印并停止执行

  • 可以在一系列if/elseif/else语句中转换null合并运算符。从你的例子来看:

    echo$foo$酒吧$巴兹$qux;//产出1
    
    翻译成if/else语句:


    您可以在一系列if/elseif/else语句中转换null合并运算符。从你的例子来看:

    echo$foo$酒吧$巴兹$qux;//产出1
    
    翻译成if/else语句:


    将回显第一个非空条目$foo和$bar都是空的,但$baz不是正确的术语@MarkBaker。测试不针对它们是否为空,但如果它们确实为null(unset),空变量将从本例中得到响应。它并不是毫无意义地被称为空合并运算符。第一个非空的条目将被回显$foo和$bar都是空的,但$baz不是正确的术语@MarkBaker。测试不针对它们是否为空,但如果它们确实为null(unset),空变量将从本例中得到响应。它并非毫无意义地被称为空合并运算符。