Уточнение тернарного оператора PHP - PullRequest
11 голосов
/ 27 августа 2010

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

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

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

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

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

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

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

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

1 Ответ

19 голосов
/ 27 августа 2010

Начиная с 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;
}

Слово для мудрых

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

...