$hideCode = $likesObj->isAlreadyLikedByUser(facebookUID()) ? 'style="display:none;"' : '';
Может ли кто-нибудь объяснить мне, что этот знак вопроса делает в этой строке кода? Большое спасибо!
Это называется Тернарным Оператором , и это распространено на нескольких языках, включая PHP, Javascript, Python, Ruby …
$x = $condition ? $trueVal : $falseVal; // same as: if ($condition) { $x = $trueVal; } else { $x = $falseVal; }
Очень важно отметить, что при использовании тернар в PHP это:
Примечание. Обратите внимание, что тернарный оператор является оператором и что он не оценивает переменную, а результат результата. Это важно знать, хотите ли вы вернуть переменную по ссылке. Оператор возвращает $ var == 42? $ a: $ b; поэтому функция возврата по ссылке не будет работать и предупреждение будет выпущено в более поздних версиях PHP. источник
На самом деле это утверждение представляет собой тройную операцию , условное выражение:
// works like: (condition) ? if-true : if-false; $hideCode = $likesObj->isAlreadyLikedByUser(facebookUID()) ? 'style="display:none;"':'';
в вашем случае $hideCode
будет иметь style="display:none;"
значение, если
$likesObj->isAlreadyLikedByUser(facebookUID())
вернет true, иначе он будет пустым или пустым.
Это более короткая версия оператора IF.
$hideCode = $likesObj->isAlreadyLikedByUser(facebookUID()) ? ' style="display:none;"':'';
если на самом деле:
if($likesObj->isAlreadyLikedByUser(facebookUID())) { $hideCode = 'style="display:none"'; } else { $hideCode = ""; }
Для пуризма:
Он представляет собой тройную операцию
Это простая логика типа if-then-else:
(condition) ? (if-true-value) : (if-false-value)
поэтому в вашем случае условие проверяется (т. е. страница уже понравилась пользователю); если да (истинное условие), тогда style="display:none;"
печатается так, что независимо от того, какой элемент вы используете, не отображается. В противном случае печатается пустая строка, что, естественно, равносильно тому, чтобы ничего не печатать.
Это тернарный оператор: это означает
if $likesObj->isAlreadyLikedByUser(facebookUID())
истинно присваивает style="display:none;
к переменной, иначе назначает ''
Это часть троичного оператора . Первая часть – это условие выражения if-else. После того, как вопросительный знак представляет собой блок «if», а после двоеточия – блок «else».
Это очень компактный if-clause.
(состояние) ? :
$ hideCode = $ likesObj-> isAlreadyLikedByUser (facebookUID ())? 'Не стиль = "дисплей: нет;"': '';
Это то же самое, что и следующее:
if ($likesObj->isAlreadyLikedByUser(facebookUID())) { $hideCode = 'style="display:none;"'; } else { $hideCode = ''; }