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 }
, но я не понимаю?, повторяя получение снова: или. Может кто-то помочь сломать это для меня или по крайней мере указать мне в правильном направлении?
Ответы
Ответ 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
Ответ 5
Он называется тернарным оператором. Это сокращение для блока if-else. См. Здесь пример http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary
Ответ 6
? называется тернарным (условным) оператором: example
Ответ 7
То, что вы смотрите, называется Терминальный оператор, и вы можете найти реализация PHP здесь. Это инструкция if else
.
if (isset($_GET['something']) == true) {
thing = isset($_GET['something']);
} else {
thing = "";
}
Ответ 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']);