'Ternary Operator' 即 'conditional operator' 如何与 'echo' 语句一起使用,因为 'echo' 语句没有 return 任何值?

How does the 'Ternary Operator' i.e. the 'conditional operator' work with the 'echo' statement since the 'echo' statement doesn't return any value?

我在笔记本电脑上使用 PHP 7.3.6 Windows 10 Home Single Language 64-bit操作系统.

我已经在我的笔记本电脑上安装了最新版本的 XAMPP 安装程序,其中安装了 Apache/2.4.39 (Win64 )PHP 7.3.6

今天,我从 PHP Manual 中看到以下代码示例:

<?php
  echo $some_var ? 'true': 'false'; // changing the statement around
?>

据我所知,根据 PHP Manual 中的以下文字:

The expression (expr1) ? (expr2) : (expr3) evaluates to expr2 if expr1 evaluates to TRUE, and expr3 if expr1 evaluates to FALSE.

PHP 中的 echo 语句没有 return 任何值也是众所周知的事实。

因此,在上面提到的代码示例中,echo 语句也不能 returning 任何值。

所以,我的问题是,echo 语句从来没有 return 任何值,三元运算符如何知道 expr1(i.e. the statement echo $some_var) 已被评估为真或假,因此将输出打印为 truefalse?

你读错了逻辑。这就是为什么我喜欢用括号表示我的三元语句。你的三进制是一样的:

if ($some_var) {
    echo 'true';
} else {
    echo 'false';
}

条件语句中未使用 echo。如果我们把三元改成这样,事情就更清楚了:

echo ($some_var ? 'true' : 'false');

这可以看作是echo (if ($some_var) {true} else {false})(至少从逻辑的角度来看)

所以它不是被测试的回声,它是 ? 之前的位 - 那是 if 条件语句,而不是 echo

Echo 在 PHP 游戏中有点奇怪。当它执行时,它实际上是将您的语句包装在括号中,更像是一个函数。

所以

<?php

$something = true;

// this
echo $something ? 'is true' : 'is false';

// becomes 
echo($something ? 'is true' : 'is false');

三元表达式的计算结果为 'is true',即 "echoed"。