Solución
echo $person->middleName ?? 'Person does not have a middle name';
Para mostrar cómo se vería esto en una declaración if para obtener más claridad sobre cómo funciona esto.
if($person->middleName ?? false) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
Explicación
La forma tradicional de PHP para verificar la existencia de algo es hacer:
if(isset($person->middleName)) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
O para una forma más específica de clase:
if(property_exists($person, 'middleName')) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
Ambos están bien en declaraciones de forma larga, pero en declaraciones ternarias se vuelven innecesariamente engorrosas de esta manera:
isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
También puede lograr esto solo con el operador ternario así:
echo $person->middleName ?: 'Person does not have a middle name';
Pero ... si el valor no existe (no está establecido), aumentará E_NOTICE
y no es la mejor práctica. Si el valor es, null
no generará la excepción.
Por lo tanto, el operador ternario al rescate hace que esta sea una pequeña y clara respuesta:
echo $person->middleName ?? 'Person does not have a middle name';