Solução
echo $person->middleName ?? 'Person does not have a middle name';
Mostrar como isso ficaria em uma declaração if para obter mais clareza sobre como isso está funcionando.
if($person->middleName ?? false) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
Explicação
A maneira tradicional do PHP de verificar a existência de algo é:
if(isset($person->middleName)) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
OU para uma maneira mais específica de classe:
if(property_exists($person, 'middleName')) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
Ambos são bons em declarações de formato longo, mas em declarações ternárias tornam-se desnecessariamente pesados da seguinte maneira:
isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
Você também pode conseguir isso apenas com o operador ternário da seguinte forma:
echo $person->middleName ?: 'Person does not have a middle name';
Mas ... se o valor não existe (não está definido), ele gera uma E_NOTICE
e não é uma prática recomendada. Se o valor for null
, não gerará a exceção.
Portanto, operador ternário para o resgate, fazendo desta uma pequena resposta pura:
echo $person->middleName ?? 'Person does not have a middle name';