PHP, эквивалентный для Ruby или - равняется (нечто || =bar)?

В PHP я часто пишу строки как

isset($foo)? NULL : $foo = 'bar'

В рубине существует блестящий ярлык, для которого, названный или равняется

foo ||= 'bar'

PHP имеет такой оператор, ярлык или вызов метода? Я не могу найти один, но я, возможно, пропустил его.

20
задан Community 23 May 2017 в 12:34
поделиться

5 ответов

Начиная с PHP7, вы можете использовать Null Coalesce Operator:

Добавлен оператор coalesce, или ???, который возвращает результат своего первого операнда, если он существует и не является NULL, или второго операнда.

Поэтому вы можете написать:

$foo = $foo ?? 'bar';

и он будет использовать $foo, если он установлен и не является null, или присвоит "bar" $foo.

В качестве примечания, пример, который вы приводите с тернарным оператором, на самом деле должен звучать так:

$foo = isset($foo) ? $foo : 'bar';

Тернарная операция - это не сокращенная структура управления if/else, но она должна использоваться для выбора между двумя выражениями, зависящими от третьего, а не для выбора двух предложений или путей выполнения

22
ответ дан 29 November 2019 в 23:27
поделиться

Вы можете создать свою собственную функцию:

function setIfNotSet(&$var, $value) {
    if(!isset($var)) {
        $var = $value;
    }
}
5
ответ дан 29 November 2019 в 23:27
поделиться

Начиная с PHP 5.3, можно использовать $ foo?: 'Bar' Если вы не ожидаете, что $ foo будет ложным

[править]

Забудьте об этом. Он по-прежнему вызывает E_NOTICE, если $ foo не задано.

3
ответ дан 29 November 2019 в 23:27
поделиться

Нет. Согласно w3schools, этого оператора не существует.

Кроме того, PHP-код, который вы опубликовали, довольно загадочен. Я предпочитаю что-то вроде этого:

if (!isset($foo)) $foo = 'bar';
1
ответ дан 29 November 2019 в 23:27
поделиться

Из руководства:

Начиная с PHP 5.3, можно опускать среднюю часть тернарного оператора. Выражение expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE, и expr3 в противном случае.

Это не совсем то же самое. Надеюсь, это все равно поможет.

2
ответ дан 29 November 2019 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: