isset PHP isset($_GET['что-то']) ? $_GET['что-то'] : ''

Я хочу расширить свои знания PHP, и я наткнулся на то, что я не уверен, что это такое и как его искать. Я смотрю код isset php.net и вижу isset($_GET['something']) ? $_GET['something'] : ''

Я понимаю обычные операции isset, такие как if(isset($_GET['something']){ If something is exists, then it is set and we will do something }, но я не понимаю ?, повторение get снова, : или ''. Может ли кто-нибудь помочь сломать это для меня или, по крайней мере, указать мне правильное направление?


person user1625186    schedule 25.08.2012    source источник
comment
связанный stackoverflow.com /вопросы/3737139/   -  person Musa    schedule 26.08.2012
comment
возможный дубликат Что такое PHP? : вызывается оператор и что он делает?   -  person Niko    schedule 26.08.2012


Ответы (8)


Его обычно называют «сокращением» или тернарным оператором. .

$test = isset($_GET['something']) ? $_GET['something'] : '';

означает

if(isset($_GET['something'])) {
    $test = $_GET['something'];
} else {
    $test = '';
}

Чтобы разбить его:

$test = ... // assign variable
isset(...) // test
? ... // if test is true, do ... (equivalent to if)
: ... // otherwise... (equivalent to else)

Or...

// test --v
if(isset(...)) { // if test is true, do ... (equivalent to ?)
    $test = // assign variable
} else { // otherwise... (equivalent to :)
person uınbɐɥs    schedule 25.08.2012
comment
Это не совсем просто. - person Bright umor; 18.09.2020

В PHP 7 вы можете написать еще короче:

$age = $_GET['age'] ?? 27;

Это означает, что для переменной $age будет задан параметр age, если он указан в URL-адресе, или по умолчанию будет установлено значение 27.

Ознакомьтесь со всеми новыми функциями PHP 7.

person George Garchagudashvili    schedule 25.07.2016

Это называется тернарным оператором и в основном используется вместо оператора if-else.

В приведенном вами примере его можно использовать для извлечения значения из массива, если isset возвращает true

isset($_GET['something']) ? $_GET['something'] : ''

эквивалентно

if (isset($_GET['something'])) {
  $_GET['something'];
} else {
  '';
}

Конечно, это не очень полезно, если вы не назначите его чему-то и, возможно, даже не назначите значение по умолчанию для значения, отправленного пользователем.

$username = isset($_GET['username']) ? $_GET['username'] : 'anonymous'
person sciritai    schedule 25.08.2012

Вы столкнулись с тернарным оператором. Его цель - это основная инструкция if-else. Следующие фрагменты кода делают то же самое.

Тернарный:

$something = isset($_GET['something']) ? $_GET['something'] : "failed";

Если еще:

if (isset($_GET['something'])) {
    $something = $_GET['something'];
} else {
    $something = "failed";
}
person FThompson    schedule 25.08.2012

Он называется тернарным оператором. Это сокращение от блока if-else. См. здесь пример http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

person mathematician1975    schedule 25.08.2012

? называется тернарным (условным) оператором: пример

person Nikola Ninkovic    schedule 25.08.2012

То, что вы видите, называется тернарным оператором, и вы можете найти реализация PHP здесь. Это if else утверждение.

if (isset($_GET['something']) == true) {
    thing = isset($_GET['something']);
} else {
    thing = "";
}
person bmorenate    schedule 25.08.2012

Если вам нужна пустая строка по умолчанию, предпочтительным способом является один из них (в зависимости от ваших потребностей):

$str_value = strval($_GET['something']);
$trimmed_value = trim($_GET['something']);
$int_value = intval($_GET['somenumber']);

Если параметр URL something не существует в URL, тогда $_GET['something'] вернет null

strval($_GET['something']) -> strval(null) -> ""

и ваша переменная $value установлена ​​​​в пустую строку.

  • trim() может быть предпочтительнее strval() в зависимости от кода (например, параметр Name может захотеть использовать его)
  • intval(), если ожидаются только числовые значения, а значение по умолчанию равно нулю. intval(null) -> 0

Случаи для рассмотрения:

...&something=value1&key2=value2 (типичное)

...&key2=value2 (параметр, отсутствующий в URL-адресе $_GET, вернет для него значение null)

...&something=+++&key2=value (параметр " ")

Почему этот подход предпочтительнее:

  • Он аккуратно вписывается в одну строку и понятно, что происходит.
  • Это читабельнее, чем $value = isset($_GET['something']) ? $_GET['something'] : '';
  • Меньший риск ошибки копирования/вставки или опечатки: $value=isset($_GET['something'])?$_GET['somthing']:'';
  • Он совместим со старыми и новыми версиями php.

Обновление. Для строгого режима может потребоваться что-то вроде этого:

$str_value = strval(@$_GET['something']);
$trimmed_value = trim(@$_GET['something']);
$int_value = intval(@$_GET['somenumber']);
person TrophyGeek    schedule 01.04.2017