isset PHP isset ($ _ GET )? $ _GET : ''

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

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

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

 $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) 

Или…

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

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

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

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

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

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

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

 $username = isset($_GET['username']) ? $_GET['username'] : 'anonymous' 

Вы столкнулись с тройным оператором . Целью является базовое выражение if-else. Следующие части кода делают то же самое.

троичной:

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

Если еще:

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

С php 7 вы можете записать его еще короче:

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

И это означает, что если в URL указан параметр возраста, он будет установлен в $age var или будет по умолчанию 27

Просмотреть все новые функции php 7

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

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

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

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

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

 $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 (параметр is " " )

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

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

Для режима обновления Strict может потребоваться примерно следующее:

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