Как «Тернарный оператор», то есть «условный оператор», работает с оператором «эхо», поскольку оператор «эхо» не возвращает никакого значения? - PullRequest
0 голосов
/ 03 июля 2019

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

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

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

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

Насколько я знаю и согласно следующему тексту из PHP Manual :

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

Это такжеобщеизвестный факт, что оператор echo в PHP не возвращает никакого значения.

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

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

Ответы [ 2 ]

3 голосов
/ 03 июля 2019

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

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

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

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

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

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

2 голосов
/ 03 июля 2019

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

Итак

<?php

$something = true;

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

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

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

...