Что такое ?
и :
операторы в PHP?
Например:
(($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER)
Это условный оператор .
$x ? $y : $z
означает «если значение $x
истинно, тогда используйте $y
, иначе используйте $z
".
Он также имеет короткую форму.
$x ?: $z
означает «если значение $x
истинно, то используйте $x
, иначе используйте $z
".
Люди скажут вам это ?:
«Тернарный оператор». Это не верно. ?:
– тернарный оператор, что означает, что он имеет три операнда. Люди замирают, думая, что его имя – «тройственный оператор», потому что это часто единственный тернарный оператор, который имеет данный язык.
Я собираюсь написать немного о троянах, о том, что они представляют, как их использовать, когда и почему их использовать и когда их не использовать.
Что такое тернарный оператор?
Тройная ? :
? :
является сокращением для 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
Вывод
Троицы действительно просты и ничто не может слишком затянуться. Не считайте улучшения скорости, это действительно не изменит ситуацию. Используйте их, когда они просты и выглядят красиво , и всегда убедитесь, что ваш код будет читаемым другими в будущем. Если это не означает тройников, то не используйте тройники.
Это называется тернарным оператором . Если первое выражение оценивается как true, HTTPS_SERVER
используется HTTP_SERVER
, иначе HTTP_SERVER
.
Это в основном сокращение, if
утверждение, и приведенный выше код также можно переписать следующим образом:
if ($request_type == 'SSL') { HTTPS_SERVER; } else { HTTP_SERVER; }
Это иногда называют тернарным условным оператором. Тернар означает, что он имеет три аргумента, как x ? y : z
x ? y : z
. В принципе, он проверяет, является ли x
истинным; если это так, то вместо этой операции положите y
, иначе z
.
$hello = $something ? "Yes, it's true" : "No, it's false";
Условный оператор ? :
? :
является оператором, который используется для проверки условия и выбора значения в зависимости от значения условия. Он выражается в следующем виде:
variable = condition ? expression1 : 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.
Это короткий способ написания предложений. Он также используется на других языках, таких как Java, JavaScript и другие.
Ваш код,
$protocol = $request_type == 'SSL' ? HTTPS_SERVER : HTTP_SERVER;
может быть написано так:
if ($request_type == 'SSL') $protocol = HTTPS_SERVER; else $protocol = HTTP_SERVER;
Это строка с выражением:
condition ? true : false
Переведенный в обычное утверждение if в вашем случае, это будет:
if($request_type == 'SSL') HTTPS_SERVER; else HTTP_SERVER;
Это в основном причудливый способ написания выражения if
else
. Некоторые говорят, что читать легче, некоторые говорят, что нет.
Тернарный оператор в Википедии
Как говорит Джон Т, он называется тернарным оператором и по существу является сокращенной версией оператора if / else. Ваш пример, как полный оператор if / else, будет читать;
if($request_type == 'SSL') { HTTPS_SERVER; } else { HTTP_SERVER; }