Я хочу расширить свои знания 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']:'';
Для режима обновления Strict может потребоваться примерно следующее:
$str_value = strval(@$_GET['something']); $trimmed_value = trim(@$_GET['something']); $int_value = intval(@$_GET['somenumber']);