PHP: Тернарный оператор
В этом разделе пойдет разговор об операторе, выполняющем несколько нетипичные действия. Существует распространенная в программировании ситуация, когда в случае выполнения некоторого условия переменной необходимо присвоить одно значение и в случае невыполнения этого условия другое значение. В следующем примере переменной $min присваивается наименьшее из значений $foo и $bar c помощью конструкции if else :
На практике подобные действия оказались настолько распространенными, что был разработан специальный условный оператор , выполняющий данные действия — сокращенный способ присваивания значения переменной на основе выполнения того или иного условия. Этот оператор использует три операнда (по этой причине его часто называют тернарным ) и записывается с помощью двух знаков ‘ ? : ‘. Он является единственным оператором в PHP, который использует более двух операндов. С помощью тернарного оператора можно записать предыдущий пример следующим образом:
Сначала проверяется результат работы условного выражения, если условие вернет значение true , то переменной $min присвоиться значение переменной $foo , если false , значение переменной $bar .
Синтаксис тернарного оператора:

Первым делом интерпретатор PHP вычисляет значение условия, если оно возвращает true, переменной присваивается значение выражения, находящегося по левую сторону от двоеточия (в данном случае выражение1). Если условие возвращает false , переменной присваивается значение выражения, находящегося справа от двоеточия (в данном случае выражение2). Скобки вокруг условного выражения не обязательны, но их довольно часто употребляют для более легкого визуального восприятия тернарного оператора. Тернарные выражения вычисляются слева направо.
Тернарные операторы могут быть вложенными:
Как видно из примера, несмотря на то, что тернарные операторы могут быть вложенными, использовать их таким образом не рекомендуется. Поэтому вложенные тернарные операторы лучше заменить на конструкцию elseif/else if или switch-case (оператор switch будет рассмотрен в следующей главе).
Напоследок стоит упомянуть об одной особенности: у тернарного оператора есть возможность не писать его среднюю часть.
Выражение ($a1) ?: 10 возвращает значение переменной $a1 , если $a1 имеет значение TRUE , и 10 в противном случае.
С этой темой смотрят:
Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011 – 2024 © puzzleweb.ru | razumnikum.ru
PHP: Тернарный оператор
Тернарный оператор ?: в PHP позволяет выполнять простое условное сравнение в одной строке.
# Синтаксис $variable = (условие) ? значение_если_истина : значение_если_ложь; # Пример: $age = 25; $message = ( $age >= 18 ) ? 'Доступ разрешен' : 'Доступ запрещен';
Краткий тернарный оператор
Краткий тернарный оператор ?: работает почти так же, как и обычный тернарный оператор, но он пропускает часть «если истина», возвращая тестовое выражение в случае истины.
# Синтаксис $variable = (условие) ?: значение_если_ложь; # Пример: $name = ‘Александр’; $displayName = $name ?: ‘Гость’; # Аналогичен этому коду if( $name ) < $displayName = $name; >else
Оператор объединения с null или оператор Null coalescing
Оператор ?? проверяет, является ли значение NULL или не установлено, и возвращает первое не-NULL значение из списка.
# Синтаксис $variable = значение1 ?? значение2 ?? значение3; # Пример: $username = $_GET[‘username’] ?? ‘Гость’; # В данном примере, если $_GET[‘username’] не установлен или NULL, переменная $username будет установлена в ‘Гость’. # Аналогичен этому коду $username = isset( $_GET[‘username’] ) ? $_GET[‘username’] : ‘Гость’; # Или этому if( isset( $_GET[‘username’] ) ) < $username = $_GET['username']; >else
Операторы
Оператором называется нечто, что принимает одно или более значений (или выражений, если говорить на жаргоне программирования), и вычисляет новое значение (так, всю конструкцию можно рассматривать как выражение).
Операторы можно сгруппировать по количеству принимаемых ими значений. Унарные операторы принимают только одно значение, например, ! (оператор логического отрицания) или ++ (инкремент). Бинарные операторы принимают два значения; это, например, знакомые всем арифметические операторы + (плюс) и — (минус), бо́льшая часть поддерживаемых в PHP операторов входит в эту категорию. И на последок, существует всего один тернарный оператор, ? : , принимающий три значения, обычно о нём говорят просто — «тернарный оператор» (хотя, возможно, более точным названием было бы «условный оператор»).
Весь список PHP-операторов перечислен в разделе «Приоритет оператора». В этом разделе также описан порядок выполнения операторов и их ассоциативность, которые точно определяют, как вычисляются выражения с несколькими разными операторами.
User Contributed Notes 4 notes
19 years ago
of course this should be clear, but i think it has to be mentioned espacially:
AND is not the same like &&
the second
a and (b or c)
’cause || has got a higher priority than and, but less than &&
of course, using always [ && and || ] or [ AND and OR ] would be okay, but than you should at least respect the following:
the first code will set $a to the result of the comparison $b with $c, both have to be true, while the second code line will set $a like $b and THAN — after that — compare the success of this with the value of $c
maybe usefull for some tricky coding and helpfull to prevent bugs 😀
3 years ago
Operator are used to perform operation.
Operator are mainly divided by three groups.
1.Uniary Operators that takes one values
2.Binary Operators that takes two values
3.ternary operators that takes three values
Operator are mainly divided by three groups that are totally seventeen types.
1.Arithmetic Operator
+ = Addition
— = Subtraction
* = Multiplication
/ = Division
% = Modulo
** = Exponentiation
2.Assignment Operator
= null coalescing
14.Clone new Operator
clone new = clone new
15.yield from Operator
yield from = yield from
16.yield Operator
yield = yield
17.print Operator
print = print
22 years ago
Other Language books’ operator precedence section usually include «(» and «)» — with exception of a Perl book that I have. (In PHP «<" and ">» should also be considered also). However, PHP Manual is not listed «(» and «)» in precedence list. It looks like «(» and «)» has higher precedence as it should be.
">
Note: If you write following code, you would need «()» to get expected value.
$bar = true ;
$str = «TEST» . ( $bar ? ‘true’ : ‘false’ ) . «TEST» ;
?>
Without «(» and «)» you will get only «true» in $str.
(PHP4.0.4pl1/Apache DSO/Linux, PHP4.0.5RC1/Apache DSO/W2K Server)
It’s due to precedence, probably.
15 years ago
The variable symbol ‘$’ should be considered as the highest-precedence operator, so that the variable variables such as $$a[0] won’t confuse the parser. [http://www.php.net/manual/en/language.variables.variable.php]
- Справочник языка
- Основы синтаксиса
- Типы
- Переменные
- Константы
- Выражения
- Операторы
- Управляющие конструкции
- Функции
- Классы и объекты
- Пространства имён
- Перечисления
- Ошибки
- Исключения
- Fibers
- Генераторы
- Атрибуты
- Объяснение ссылок
- Предопределённые переменные
- Предопределённые исключения
- Встроенные интерфейсы и классы
- Предопределённые атрибуты
- Контекстные опции и параметры
- Поддерживаемые протоколы и обёртки
- Copyright © 2001-2024 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
Как использовать тернарный оператор (?:) в PHP как сокращение «if/else»
Основываясь на различных примерах, ниже я могу представить рабочие и нерабочие образцы кода.
Рабочий код с использованием оператора if :
if (!empty($address[‘street2’])) echo $address[‘street2′].’
‘;Нерабочий код с использованием тернарного оператора:
$test = (empty($address[‘street2’])) ? ‘Да
‘ : ‘Нет
‘;// Также проверено следующее
(empty($address[‘street2’])) ? ‘Да
‘ : ‘Нет
‘;// Или
echo (empty($storeData[‘street2’])) ? ‘Да
‘ : ‘Нет
‘;Ответ 1
(condition) ? /* значение, которое возвращается, если условие истинно */
: /* значение, которое возвращается, если условие ложно */ ;
синтаксис не является сокращенным оператором if ( « ?» называется условным оператором), потому что вы не можете выполнить код таким же образом, как если бы вы сделали это:
if (condition)
/* условие истинно, сделайте что-то вроде echo */
> else
/* условие ложно, сделайте что-нибудь еще */
>
В вашем примере вы выполняете инструкцию echo , когда $address не пусто. Вы не можете сделать то же самое с условным оператором. Однако то, что вы можете сделать, является echo результатом условного оператора:
echo empty($address[‘street2’]) ? » Улица2 пуста !» : $address[‘street2’];
и эта конструкция отобразит « Улица2 пуста! » если она пуста, в противном случае будет отображаться адрес street2.
Ответ 2
Основное истинное/ложное объявление:
$is_admin = ($user[‘permissions’] == ‘admin’ ? true : false);
Условное приветственное сообщение:
echo ‘Добро пожаловать ‘.($user[‘is_logged_in’] ? $user[‘first_name’] : ‘Гость’).’!’;
Сообщение с условными элементами:
echo ‘Ваша корзина содержит ‘.$num_items.’ item’.($num_items != 1 ? ‘s’ : »).’.’;
Ответ 3
Быстрый и короткий путь:
echo $address[‘street2’] ? : «Нет»;
Вот несколько интересных примеров с одним или несколькими различными условиями :
$color = «blue»;
// Условие #1 Показать цвет без указания переменной
echo $color ? : «Undefined»;
echo «
«;// Условие #2
echo $color ? $color : «Undefined»;
echo «
«;// Условие #3
echo ($color) ? $color : «Undefined»;
echo «
«;// Условие #4
echo ($color == «blue») ? $color : «Undefined»;
echo «
«;// Условие #5
echo ($color == «» ? $color : ($color == «blue» ? $color : «Undefined»));
echo «
«;// Условие #6
echo ($color == «blue» ? $color : ($color == «» ? $color : ($color == «» ? $color : «Undefined»)));
echo «
«;// Условие #7
echo ($color != «») ? ($color != «» ? ($color == «blue» ? $color : «Undefined») : «Undefined») : «Undefined»;
echo «
«;Ответ 4
- Е сть $score > 10 ? да .
- Е сть $age > 10 ? нет, поэтому текущий $age > 10 ? ‘Average’ : ‘Exceptional’ возвращает « Exceptiona l ».
- З атем, вместо того, чтобы просто останавливать весь оператор и возвращать « Exceptional », он продолжает вычислять следующий оператор.
- С тановится следующий оператор, ‘Exceptional ‘? ‘Horrible ‘: ‘Average’, который возвращает « Horrible », поскольку « Exceptional » является правдой.
Ответ 5
Я думаю, вам, вероятно, не следует использовать тернарный оператор в php. Рассмотрим следующий пример:
function f1($n)
var_dump(«первая функция»);
return $n == 1;
>
function f2($n)
var_dump(«вторая функция»);
return $n == 2;
>
$foo = 1;
$a = (f1($foo)) ? «uno» : (f2($foo)) ? «dos» : «tres»;
print($a);
Как вы думаете, что переменная $a будет содержать? (подсказка: dos) И она останется такой же, даже если переменной $foo будет присвоено значение 2.
Чтобы было лучше понятно, вы должны либо отказаться от использования этого оператора, либо заключить правую часть в круглые скобки следующим образом:
$a = (f1($foo)) ? «uno» : ((f2($foo)) ? «dos» : «tres»);
Ответ 6
Тернарный оператор – это в основном сокращение для оператора if/else. Мы можем использовать его, чтобы сократить количество строк кода и повысить удобочитаемость.
Ваш код мне кажется чище. Но мы можем добавить более чистый способ следующим образом:
$test = (empty($address[‘street2’])) ? ‘Да
‘ : ‘Нет
‘;Другой путь :
$test = ((empty($address[‘street2’])) ? ‘Да
‘ : ‘Нет
‘);Примечание. Я добавил скобки ко всему выражению, чтобы оно было чище. Обычно я делал это для повышения читабельности. С PHP7 мы можем использовать Null Coalescing Operator/php 7 ?? оператор для лучшего подхода. Но для вашего случая это не подходит.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.