Начиная с PHP 5.3, можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.
Есть ли лучший или более сжатый способ, чем следующий код для установки значения по умолчанию для переменных?
$v = isset($v) ? $v : "default value";
Вот более короткий синтаксис:
isset($v) || $v="default value";
TL; DR – Нет, это выражение нельзя сделать короче.
Вы хотите, чтобы сокращенное тернарное выражение выполняло неявное isset()
. Это было обсуждено в списке рассылки, и был ifsetor
RFC- ifsetor
, который также охватывает эту концепцию.
Поскольку укороченный тернарный оператор уже существовал во время вышеупомянутого обсуждения, что-то вроде этого было предложено с использованием несуществующего оператора ??
:
// PROPOSAL ONLY, DOES NOT WORK $v = $v ?? 'default value';
Назначьте 'default value'
если $v
не определено.
Однако на данный момент ничего подобного не было реализовано на основном языке. До тех пор то, что вы написали, не может быть сокращено.
Эта ужасная конструкция короче, но обратите внимание, что это не одно и то же, потому что она присваивает значение по умолчанию, если переменная существует, но имеет значение false
:
// DO NOT USE $v = @$v ?: 'default value';
Просто спросил об этом и указал здесь. Поэтому, если вы используете key
array
, это может быть улучшение
function isset_get($array, $key, $default = null) { return isset($array[$key]) ? $array[$key] : $default; }
Неа. Это правильный путь, если вы действительно не знаете, установлен ли $v
.
Ни в коем случае. Если вы используете тернарный оператор.