Подтвердить что ты не робот

Isset PHP isset ($ _ GET ['something'])? $_GET ['something']: ''

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

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

4b9b3361

Ответ 1

Он обычно называется "стенографией" или Тернарным оператором.

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

Ответ 2

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

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

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

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

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

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

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

Ответ 3

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

троичной:

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

Если-то еще:

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

Ответ 4

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

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

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

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

Ответ 6

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

Ответ 8

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

$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']);