Solution
echo $person->middleName ?? 'Person does not have a middle name';
Pour montrer à quoi cela ressemblerait dans une instruction if pour plus de clarté sur la façon dont cela fonctionne.
if($person->middleName ?? false) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
Explication
La manière traditionnelle PHP de vérifier l'existence de quelque chose est de faire:
if(isset($person->middleName)) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
OU pour une manière plus spécifique à la classe:
if(property_exists($person, 'middleName')) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
Ce sont tous les deux très bien dans les déclarations de forme longue, mais dans les déclarations ternaires, ils deviennent inutilement encombrants comme ceci:
isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
Vous pouvez également y parvenir avec juste l'opérateur ternaire comme ceci:
echo $person->middleName ?: 'Person does not have a middle name';
Mais ... si la valeur n'existe pas (n'est pas définie), elle lèvera un E_NOTICE
et ce n'est pas la meilleure pratique. Si la valeur est, null
elle ne lèvera pas l'exception.
Par conséquent, l'opérateur ternaire à la rescousse, ce qui en fait une petite réponse intéressante:
echo $person->middleName ?? 'Person does not have a middle name';