Что такое PHP-операторы? "и":" призваны и что они делают?

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

Например:

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

Ответ 1

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

$x ? $y : $z

означает "if $x true, затем используйте $y, в противном случае используйте $z".

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

$x ?: $z

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

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

Ответ 2

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

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

Тройной ? : является сокращением для if и else. Это в основном это. См. "Терминальные операторы" на полпути вниз эта страница для более официального объяснения.

Начиная с PHP 5.3:

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

Начиная с PHP 7.0

В PHP 7 появился новый оператор Null Coalesce. Это то же самое, что и тернарный, но также называется isset trernary". Это также позволяет набор цепочечных троек, которые устраняют необходимость проверки 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
  • Во-первых, это был оранжевый.

Заключение

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

variable = condition ? expression1 : expression2;

Он работает следующим образом:

  • Во-первых, оценивается условие.
  • Если условие истинно, то выражение1 будет изменено. И значение expression1 присваивается переменной .
  • Если условие является ложным, оценивается выражение2. И значение переменной expression2 присваивается переменной.

Например:

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.

Ответ 6

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

Ваш код,

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

можно записать следующим образом:

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

Ответ 7

Это оператор с одной строкой:

condition ? true : false

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

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

Ответ 8

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

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

Ответ 9

Как говорит Джон Т, он называется тернарным оператором и по существу является сокращенной версией оператора if/else. Ваш пример, как полный оператор if/else, будет читать:

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