Сокращенное условное значение для определения переменной, основанной на существовании другой переменной в PHP
По сути, я бы хотел, чтобы определить переменную как одну вещь, если эта вещь не существует. Я клянусь, что где-то я увидел условное сокращение, которое выглядело примерно так:
$var=$_GET["var"] || "default";
Но я не могу найти документацию, чтобы сделать это правильно, и, честно говоря, это может быть JS или ASP или что-то там, где я его видел.
Я понимаю, что все, что должно происходить в приведенном выше коде, - это просто проверить, возвращает ли оператор true. Но я думал, что видел, как кто-то делает что-то, что по сути определило значение по умолчанию, если первое не удалось. Это что-то об этом знает и может мне помочь? Я сумасшедший? Кажется излишним сказать:
$var=($_GET["var"]) ? $_GET["var"] : "default";
или особенно лишний, чтобы сказать:
if ($_GET["var"]) { $var=$_GET["var"]; } else { $var="default"; }
Мысли?
Ответы
Ответ 1
Мэтью уже упомянул единственный способ сделать это в PHP 5.3. Обратите внимание, что вы также можете связать их:
$a = false ?: false ?: 'A'; // 'A'
Это не то же самое, что:
$a = false || false || 'A'; // true
Причина в том, что PHP подобен большинству традиционных языков в этом аспекте. Логическое ИЛИ всегда возвращает true
или false
. Однако в JavaScript используется окончательное выражение. (В серии ORs он будет первым недействительным.)
var a = false || 'A' || false; // 'A'
var b = true && 'A' && 'B'; // 'B';
Ответ 2
В таких случаях вы должны проверить наличие переменной в $_GET, а затем, действительно ли она действительна для ваших параметров. Например:
$var = (isset($_GET["var"]) && $_GET['var'] !== '') ? $_GET["var"] : "default";
Однако это может стать довольно нечитаемым довольно быстро. Я бы сказал, что он читается, сначала инициализируя вашу переменную до безопасного по умолчанию, а затем перезаписывая ее с помощью внешнего, если это действительно:
$var = "default";
if (isset($_GET['var') && $_GET['var'] !== '') {
$var = $_GET['var] ;
}
Как для вашего первого примера, $var=$_GET["var"] || "default";
существует в Javascript: var someVar = incomingVar || "default";
Ответ 3
Я всегда использовал пустой.
$var = !empty($_GET['var'])?$_GET['var']:'default';