Giải pháp
echo $person->middleName ?? 'Person does not have a middle name';
Để cho thấy điều này sẽ trông như thế nào trong một câu lệnh if cho rõ ràng hơn về cách thức hoạt động của nó.
if($person->middleName ?? false) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
Giải trình
Cách PHP truyền thống để kiểm tra sự tồn tại của một cái gì đó là làm:
if(isset($person->middleName)) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
HOẶC cho một cách cụ thể hơn lớp:
if(property_exists($person, 'middleName')) {
echo $person->middleName;
} else {
echo 'Person does not have a middle name';
}
Cả hai đều ổn trong các câu lệnh dài nhưng trong các câu lệnh ternary chúng trở nên cồng kềnh không cần thiết như vậy:
isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
Bạn cũng có thể đạt được điều này chỉ với toán tử ternary như vậy:
echo $person->middleName ?: 'Person does not have a middle name';
Nhưng ... nếu giá trị không tồn tại (không được đặt), nó sẽ tăng E_NOTICE
và không phải là cách thực hành tốt nhất. Nếu giá trị là null
nó sẽ không tăng ngoại lệ.
Do đó, nhà điều hành ternary để giải cứu làm cho câu trả lời nhỏ gọn này:
echo $person->middleName ?? 'Person does not have a middle name';