Я довольно часто использую троичный оператор, но мне не удалось найти что-либо в документации по этому поводу, и мне всегда было интересно.
Ниже приведен возможный пример:
echo ($something->message ? $something->message : 'no message');
, как видите, если что-то $> сообщение верное, мы возвращаем $ нечто-> сообщение, но зачем писать его дважды? Есть ли способ сделать что-то вроде:
echo ($something->message ? this : 'no message');
Теперь я не очень разбираюсь в теории программирования, поэтому возможно, что есть причина, по которой на первое нельзя ссылаться с чем-то , например, , «этим», но почему бы нет? Не приведет ли это к поточному использованию троичного оператора? Для чего-то вроде моего примера это довольно бесполезно, но допустим, что
echo (function(another_function($variable)) ? function(another_function($variable)) : 'false');
я не могу найти какой-либо способ сделать это, поэтому я предполагаю, что это невозможно, если я ошибаюсь, пожалуйста, сообщите я, иначе: почему бы и нет? Почему это невозможно, какова техническая причина, или это просто то, чего никогда не было? Должен ли я объявить его как переменную, а затем проверить ее?
Начиная с 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
.