Use menos código para fazer o que você precisa.
Você não precisa especificar a variável novamente usando o _?_:_
formato.
echo $var?:"default";
É o mesmo que
echo $var?$var:"default";
Agora, no que diz respeito a uma verificação vazia, você poderia usar @
para silenciar avisos, não tenho certeza das ramificações técnicas, mas você já está fazendo sua própria verificação ao usar este formato:
echo @$non_existing_var?:"default";
Alguns exemplos:
<?php
$nope = null;
$yup = "hello";
echo ($nope?:$yup) . "n" ;
echo ($yup?:$nope) . "n" ;
$items = [ 'one', 'two', false, 'three', 'four', null ];
foreach($items as $item):
echo($item?:"default shown (".var_export($item,true).")")."n";
endforeach;
echo(@$non_existing?:"default for non-existant variable!");
?>
Resultado:
$ php variabledefault.php
hello
hello
one
two
default shown (false)
three
four
default shown (NULL)
default for non-existant variable!%