Как «Тернарный оператор», то есть «условный оператор», работает с оператором «echo», поскольку оператор «echo» не возвращает никакого значения?

Я использую PHP 7.3.6 на своем ноутбуке, который работает под управлением 64-разрядной операционной системы Windows 10 Home Single Language.

Я установил последнюю версию установщика XAMPP на свой ноутбук, на котором установлены Apache / 2.4.39 (Win64) и PHP 7.3.6

Сегодня я наткнулся на следующий пример кода из Руководство по PHP:

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

Насколько мне известно, и согласно следующему тексту из Руководство по PHP:

Выражение (expr1)? (expr2): (expr3) оценивается как expr2, если expr1 оценивается как TRUE, и expr3, если expr1 оценивается как FALSE.

Также хорошо известно, что оператор echo в PHP не возвращает никакого значения.

Итак, в примере кода, упомянутом выше, также оператор echo не должен возвращать никакого значения.

Итак, мой вопрос заключается в том, что, поскольку оператор echo никогда не возвращает никакого значения, как тернарный оператор узнает, что expr1(i.e. the statement echo $some_var) был оценен как истина или ложь, и, соответственно, выводит результат как true или false?


person PHPGeek    schedule 03.07.2019    source источник
comment
@treyBake: Я знаю, что echo - это не встроенная функция в PHP, это языковая конструкция. Я сомневаюсь, что функциональность тернарного оператора зависит исключительно от значения expr1. Затем, как с помощью оператора echo было определено, что независимо от того, оценивается ли expr1 как true или false как эхо, никогда не возвращает никакого значения?   -  person PHPGeek    schedule 03.07.2019
comment
Это не echo оценивается тернарным выражением. Это $some_var. Он проверяет, является ли это true или false, и возвращает строку 'True' или строку 'False', которая только после этого выводится echo.   -  person JNevill    schedule 03.07.2019
comment
вы не используете эхо для возврата значения, вы используете эхо в сочетании с тернарным оператором для минимизации строк. Эхо не имеет значения, это может быть include, var_dump, print_r - важно то, что находится внутри тернарного элемента.   -  person treyBake    schedule 03.07.2019


Ответы (2)


вы неправильно читаете логику. Вот почему мне нравятся скобки для моих троичных утверждений. Ваш тернар такой же, как:

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

эхо не используется в условном выражении. Если мы изменим тернар на это, все станет яснее:

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

это можно рассматривать как echo (if ($some_var) {true} else {false}) (по крайней мере, с логической точки зрения)

Так что тестируется не эхо, а бит перед ? - это условное выражение if, а не echo

person treyBake    schedule 03.07.2019

Echo - довольно странный игрок в PHP-игре. Когда он выполняется, он фактически заключает ваш оператор в круглые скобки, чтобы он больше походил на функцию.

So

<?php

$something = true;

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

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

где тернарное выражение оценивается как «истинно» и это «отражается».

person parker_codes    schedule 03.07.2019