Разъяснение троичного оператора PHP

Я довольно часто использую троичный оператор, но мне не удалось найти что-либо в документации по этому поводу, и мне всегда было интересно.

Ниже приведен возможный пример:

echo ($something->message ? $something->message : 'no message');

, как видите, если что-то $> сообщение верное, мы возвращаем $ нечто-> сообщение, но зачем писать его дважды? Есть ли способ сделать что-то вроде:

echo ($something->message ? this : 'no message');

Теперь я не очень разбираюсь в теории программирования, поэтому возможно, что есть причина, по которой на первое нельзя ссылаться с чем-то , например, , «этим», но почему бы нет? Не приведет ли это к поточному использованию троичного оператора? Для чего-то вроде моего примера это довольно бесполезно, но допустим, что

echo (function(another_function($variable)) ? function(another_function($variable)) : 'false');

я не могу найти какой-либо способ сделать это, поэтому я предполагаю, что это невозможно, если я ошибаюсь, пожалуйста, сообщите я, иначе: почему бы и нет? Почему это невозможно, какова техническая причина, или это просто то, чего никогда не было? Должен ли я объявить его как переменную, а затем проверить ее?

11
задан VolkerK 27 August 2010 в 00:12
поделиться

1 ответ

Начиная с PHP 5.3 можно опустить среднюю часть тернарного оператора. Выражение expr1 ?: expr3 возвращает expr1, если expr1 принимает значение TRUE, и expr3 в противном случае.

Источник

Например

$used_value = function1() ?: $default_value;

То же самое, что и

$check_value = function1(); //doesn't re-evaluate function1()
if( $check_value ) {
    $used_value = $check_value;
} else {
    $used_value = $default_value;
}

Word for the wise

Если вы собираетесь зависеть от приведения типов к TRUE, важно понимать, к чему БУДЕТ приведено приведение типов TRUE, а что нет. Вероятно, стоит освежить в памяти манипулирование типами в PHP и прочитать таблицы преобразования типов. Например, (bool)array() равно FALSE.

19
ответ дан 3 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: