嵌套 null 合并运算符 (??) 在 PHP 中如何工作?需要执行流程的分步说明
How does nesting null coalescing operator(??) work in PHP? Need step-by-step explanation of execution flow
我正在使用 PHP 7.2.0
我已经了解 空合并运算符(??) 的正常基本用法,但我无法理解空合并运算符 ( ??) 是嵌套的。
请考虑下面的代码示例并逐步向我解释执行流程。
<?php
$foo = null;
$bar = null;
$baz = 1;
$qux = 2;
echo $foo ?? $bar ?? $baz ?? $qux; // outputs 1
?>
如果您在空合并运算符的单个步骤周围添加括号,我认为您的示例会变得更清晰。
echo ($foo ?? ($bar ?? ($baz ?? $qux)));
基本上和从左到右执行是一样的
空合并运算符是右结合运算符。这意味着操作是从右到左分组的。即,表达式 a ?? b ?? c
被评估为 a ?? (b ?? c)
.
它的工作方式与其基本用法类似。
执行流程如下:
- 它检查
isset($foo)
它没有被设置,它包含 NULL
所以,去 $bar
- 它检查
isset($bar)
它没有被设置,它太包含 NULL
所以,去 $baz
- 它检查
isset($baz)
它已被设置,它包含值 1
因此,它被打印并停止执行。
您可以在一系列 if/elseif/else 语句中翻译空合并运算符。来自你的例子:
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 合并运算符,嵌套它似乎是灾难的根源。
空合并运算符(除了有一个非常烦人的名字之外)并没有提高代码的可读性。我认为省去的几行代码不值得在阅读代码时花费额外的精力。或者让其他人遇到麻烦 reading/comprehend 您的代码是值得的。因此,对您的程序员同事来说,做一个好的程序员并谨慎使用 null 合并运算符并且从不 嵌套它。
我正在使用 PHP 7.2.0
我已经了解 空合并运算符(??) 的正常基本用法,但我无法理解空合并运算符 ( ??) 是嵌套的。
请考虑下面的代码示例并逐步向我解释执行流程。
<?php
$foo = null;
$bar = null;
$baz = 1;
$qux = 2;
echo $foo ?? $bar ?? $baz ?? $qux; // outputs 1
?>
如果您在空合并运算符的单个步骤周围添加括号,我认为您的示例会变得更清晰。
echo ($foo ?? ($bar ?? ($baz ?? $qux)));
基本上和从左到右执行是一样的
空合并运算符是右结合运算符。这意味着操作是从右到左分组的。即,表达式 a ?? b ?? c
被评估为 a ?? (b ?? c)
.
它的工作方式与其基本用法类似。
执行流程如下:
- 它检查
isset($foo)
它没有被设置,它包含NULL
所以,去$bar
- 它检查
isset($bar)
它没有被设置,它太包含NULL
所以,去$baz
- 它检查
isset($baz)
它已被设置,它包含值1
因此,它被打印并停止执行。
您可以在一系列 if/elseif/else 语句中翻译空合并运算符。来自你的例子:
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 合并运算符,嵌套它似乎是灾难的根源。
空合并运算符(除了有一个非常烦人的名字之外)并没有提高代码的可读性。我认为省去的几行代码不值得在阅读代码时花费额外的精力。或者让其他人遇到麻烦 reading/comprehend 您的代码是值得的。因此,对您的程序员同事来说,做一个好的程序员并谨慎使用 null 合并运算符并且从不 嵌套它。