В PHP я часто пишу строки как
isset($foo)? NULL : $foo = 'bar'
В рубине существует блестящий ярлык, для которого, названный или равняется
foo ||= 'bar'
PHP имеет такой оператор, ярлык или вызов метода? Я не могу найти один, но я, возможно, пропустил его.
Начиная с PHP7, вы можете использовать Null Coalesce Operator:
Добавлен оператор coalesce, или
???
, который возвращает результат своего первого операнда, если он существует и не является NULL, или второго операнда.
Поэтому вы можете написать:
$foo = $foo ?? 'bar';
и он будет использовать $foo
, если он установлен и не является null, или присвоит "bar" $foo
.
В качестве примечания, пример, который вы приводите с тернарным оператором, на самом деле должен звучать так:
$foo = isset($foo) ? $foo : 'bar';
Тернарная операция - это не сокращенная структура управления if/else, но она должна использоваться для выбора между двумя выражениями, зависящими от третьего, а не для выбора двух предложений или путей выполнения
Вы можете создать свою собственную функцию:
function setIfNotSet(&$var, $value) {
if(!isset($var)) {
$var = $value;
}
}
Начиная с PHP 5.3, можно использовать $ foo?: 'Bar'
Если вы не ожидаете, что $ foo будет ложным
[править]
Забудьте об этом. Он по-прежнему вызывает E_NOTICE, если $ foo не задано.
Нет. Согласно w3schools, этого оператора не существует.
Кроме того, PHP-код, который вы опубликовали, довольно загадочен. Я предпочитаю что-то вроде этого:
if (!isset($foo)) $foo = 'bar';
Из руководства:
Начиная с PHP 5.3, можно опускать среднюю часть тернарного оператора. Выражение expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE, и expr3 в противном случае.
Это не совсем то же самое. Надеюсь, это все равно поможет.