Вопросительный знак PHP

$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 = ''; }