Ele avalia o operando esquerdo se o operando esquerdo é verdadeiro e o operando direito, caso contrário.
No pseudocódigo,
foo = bar ?: baz;
resolve aproximadamente a
foo = bar ? bar : baz;
ou
if (bar) {
foo = bar;
} else {
foo = baz;
}
com a diferença que barserá avaliada apenas uma vez.
Você também pode usar isso para fazer uma "autoavaliação", fooconforme demonstrado no exemplo de código publicado:
foo = foo ?: bar;
Isso atribuirá bara fooif fooé nulo ou falsey, caso contrário, ele foopermanecerá inalterado.
Mais alguns exemplos:
<?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'
?>
By the way, é chamado o operador Elvis .

nullou qualquer coisa. Apenas dizendo