синтаксис — что такое операторы PHP & quot;? & quot; и & quot; & quot; называется и что они делают?

Каковы ? а также : операторы в PHP?

Например:

(($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER)

43

Решение

Это условный оператор.

$x ? $y : $z

означает «если $x верно, тогда используйте $y; иначе использовать $z».

Он также имеет краткую форму.

$x ?: $z

означает «если $x верно, тогда используйте $x; иначе использовать $z».

Люди скажут вам, что ?: это «троичный оператор». Это не верно. ?: является троичный оператор, что означает, что он имеет три операнда. Люди начинают думать, что его называют «троичный оператор», потому что это часто единственный троичный оператор, который есть в данном языке.

72

Другие решения

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

Что такое троичный оператор?

Троичный ? : это сокращение для if а также else, Вот и все. Смотрите «Троичные Операторы» на полпути вниз эта страница для более официального объяснения.

Начиная с PHP 5.3:

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

Начиная с PHP 7.0

В PHP 7 появился новый оператор слияния Null. Это так же, как троичный, но также называется «Исеть тройнойMsgstr «Это также разрешает набор цепочечных троичностей, которые устраняют необходимость проверок isset ().

В PHP 5, если вы хотите использовать троичную переменную с потенциально несуществующей переменной, вам придется выполнить isset () в начале троичной инструкции:

$result = isset($nonExistentVariable) ? $nonExistentVariable : ‘default’;

В PHP 7 теперь вы можете сделать это вместо этого:

$result = $nonExistentVariable ?? ‘default’;

Однако оператор Null Coalesce не работает с пустой строкой, так что имейте это в виду. Самое замечательное в этом то, что вы также можете объединить операторы для нескольких проверок нескольких переменных, обеспечивая своего рода резервное копирование в зависимости от того, существует ли каждая переменная в цепочке:

$user = $userImpersonatingAnotherUser ?? $loggedInUser ?? “Guest”;

В PHP, в системах, где пользователь может войти в систему, администратор нередко может выдать себя за другого пользователя в целях тестирования. В приведенном выше примере, если пользователь не выдает себя за другого пользователя, а также пользователь, вошедший в систему, не существует, он будет гостевым пользователем. Читайте дальше, если вы еще не поняли этого, чтобы увидеть, что такое троичные и как они используются, а затем вернитесь к этому фрагменту, чтобы увидеть, как новый PHP

Как используются троичные?

Вот как нормальный if Заявление выглядит:

if (isset($_POST['hello']))
{
$var = 'exists';
}
else
{
$var = 'error';
}

Давайте сократим это до троичного.

$var = isset($_POST['hello']) ? 'exists' : 'error';
^            ^     ^    ^     |
|           then   |   else   |
|                  |          |
if post isset         $var=this   $var=this

Гораздо короче, но, возможно, труднее читать. Они не только используются для установки переменных, таких как $var в предыдущем примере, но вы также можете сделать это с echoи проверить, является ли переменная ложной или нет:

$isWinner = false;

// Outputs 'you lose'
echo ($isWinner) ? 'You win!' : 'You lose';

// Same goes for return
return ($isWinner) ? 'You win!' : 'You lose';

Почему люди их используют?

Я думаю, что троицы сексуальны. Некоторые разработчики любят выпендриваться, но иногда троичные просто выглядит мило в вашем коде, особенно в сочетании с другими функциями, такими как последние версии PHP 5.4 короткое эхо.

<?php
$array = array(0 => 'orange', 1 => 'multicoloured');
?>

<div>
<?php foreach ($array as $key => $value) { ?>
<span><?=($value==='multicoloured')?'nonsense':'pointless'?></span>
<?php } ?>
</div>

<!-- Outputs:
<span>
pointless
</span>
<span>
nonsense
</span>
-->

Немного отойти от темы, когда вы находитесь в «представлении / шаблоне» (если вы разделяете свои проблемы через MVC парадигмы), вам нужна как можно меньшая логика на стороне сервера. Таким образом, использование троичных и другого сокращенного кода иногда является лучшим способом продвижения вперед. Под «другим сокращенным кодом» я имею в виду:

if ($isWinner) :
// Show something cool
endif;

Заметьте, мне лично не нравятся такие сокращения, если / endif ерунда

Насколько быстро работает троичный оператор?

Люди любят микрооптимизации. Они просто делают. Поэтому для некоторых важно знать, насколько быстрее такие вещи, как тройные, по сравнению с обычными if / else заявления.

чтение эта почта, Разница составляет около 0,5 мс. Это много!

Ой, подождите, нет, это не так. Это много, если вы делаете тысячи за тысячу подряд, неоднократно. Которым ты не будешь. Так что не стоит беспокоиться об оптимизации скорости, это абсолютно бессмысленно.

Когда не использовать троичные

Ваш код должен быть:

  • Легко читать
  • Легко понять
  • Легко изменить

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

echo ($colour === 'red') ? "Omg we're going to die" :
($colour === 'blue' ? "Ah sunshine and daisies" :
($colour === 'green' ? "Trees are green": "The bloody colour is orange, isn't it? That was pointless."));

Это было бессмысленно по трем причинам:

  • Смешно длинное тройное вложение
  • Мог бы просто использовать switch заявление
  • Это был оранжевый в первую очередь

Заключение

Троицы действительно просты, и не о чем слишком беспокоиться. Не считают любой улучшения скорости, это действительно не будет иметь значения. Используйте их, когда они просто а также выглядит мило, и всегда убедитесь, что ваш код будет доступен для чтения другими пользователями в будущем. Если это означает отсутствие троичных, то не используйте троичные.

28

Это называется троичный оператор. Если первое выражение оценивается как true, HTTPS_SERVER используется, иначе HTTP_SERVER выбран.

Это в основном стенография if заявление, и приведенный выше код также может быть переписан следующим образом:

if ($request_type == 'SSL') {
HTTPS_SERVER;
}
else {
HTTP_SERVER;
}
12

Это иногда называют троичным условным оператором. Тернарный означает, что у него есть три аргумента, как x ? y : z, В основном, это проверяет, если x правда; если да, то ставь y вместо этой операции, в противном случае z,

$hello = $something ? "Yes, it's true" : "No, it's false";
6

Условный оператор ? : является оператором, который используется для проверки условия и выбора значения в зависимости от значения условия. Это выражается в следующей форме:

variable = condition ? expression1 : expression2;

Это работает следующим образом …

  1. Во-первых, состояние оценивается.
  2. Если состояние верно, то выражение1 оценивается. И значение выражение1 назначен на переменная.
  3. Если состояние ложь, то выражения2 оценивается. И значение выражения2 присваивается переменной.

Например:

x = (a>b) ? 5 : 9

При этом для x сначала выполняется условие (a> b). Если это условие становится истинным, то x станет значением 5 (то есть x = 5). Но если условие (a> b) становится ложным, то x достигнет значения 9 (то есть x = 9).

Троичный оператор

Иногда условный оператор ? : также называется троичным оператором. Это так, потому что он включает в себя три операнда. Например:

x ? y : z

Здесь x, y и z — три операнда. Если условие x истинно, тогда присваивается значение y, в противном случае присваивается значение z.

4

Это короткий способ написания if приговоры. Он также используется в других языках, таких как Java, JavaScript и другие.

Ваш код,

$protocol = $request_type == 'SSL' ? HTTPS_SERVER : HTTP_SERVER;

можно написать так:

if ($request_type == 'SSL')
$protocol = HTTPS_SERVER;
else
$protocol = HTTP_SERVER;
2

Это одна строка, если заявление:

condition ? true : false

Переводится в обычное выражение if в вашем случае, это будет:

if($request_type == 'SSL') HTTPS_SERVER;
else HTTP_SERVER;
0

Это в основном причудливый способ написания ifelse заявление. Некоторые говорят, что читать легче, другие — нет.

Тернарный оператор в Википедии

0