?: оператор ('оператор Elvis') в PHP

Я видел это сегодня в некотором коде PHP:

$items = $items ?: $this->_handle->result('next', $this->_result, $this);

Я не знаком с ?: оператор используется здесь. Это похоже на тернарный оператор, но выражение для оценки к тому, если предикат верен, было опущено.Что это значит?

240
задан Mark Amery 24 May 2014 в 06:03
поделиться

3 ответа

Он оценивает левый операнд, если левый операнд является правдоподобным , а правый операнд - нет.

В псевдокоде

foo = bar ?: baz;

грубо разрешается

foo = bar ? bar : baz;

или

if (bar) {
    foo = bar;
} else {
    foo = baz;
}

с той разницей, что bar будет оценен только один раз.

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

foo = foo ?: bar;

Это присваивает bar к foo, если foo является нулевым или ложным, в противном случае foo останется без изменений.

Еще несколько примеров:

<?php
    var_dump(5 ?: 0); // 5
    var_dump(false ?: 0); // 0
    var_dump(null ?: 'foo'); // 'foo'
    var_dump(true ?: 123); // true
    var_dump('rock' ?: 'roll'); // 'rock'
?>

Кстати, это называется оператором Elvis.

Elvis operator

482
ответ дан 23 November 2019 в 03:17
поделиться

Да, это новое в PHP 5.3. Он возвращает либо значение тестового выражения, если оно вычислено как TRUE, либо альтернативное значение, если оно вычислено как FALSE.

4
ответ дан 23 November 2019 в 03:17
поделиться

Смотрите docs:

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

55
ответ дан 23 November 2019 в 03:17
поделиться
Другие вопросы по тегам:

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