Rozwiązanie
echo $person->middleName ?? 'Person does not have a middle name';
Aby pokazać, jak to wyglądałoby w oświadczeniu if, aby uzyskać większą jasność, jak to działa.
if($person->middleName ?? false) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
Wyjaśnienie
Tradycyjny sposób PHP na sprawdzenie, czy coś istnieje, to:
if(isset($person->middleName)) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
LUB w sposób bardziej specyficzny dla klasy:
if(property_exists($person, 'middleName')) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
Oba są dobre w długich oświadczeniach, ale w potrójnych oświadczeniach stają się niepotrzebnie uciążliwe, jak na przykład:
isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
Możesz to również osiągnąć za pomocą tylko operatora trójskładnikowego, takiego jak ten:
echo $person->middleName ?: 'Person does not have a middle name';
Ale ... jeśli wartość nie istnieje (nie jest ustawiona), podniesie wartość E_NOTICE
i nie jest najlepszą praktyką. Jeśli wartość jest równa null
, nie zgłosi wyjątku.
Dlatego trójskładnikowy operator na ratunek czyni tę zgrabną małą odpowiedź:
echo $person->middleName ?? 'Person does not have a middle name';