Toán tử kết hợp null
Thuộc phần Kiến thức cơ bản trong hành trình PHP của Coddy. Bài học 31 trên 71.
Toán tử kết hợp null (??) giúp bạn dễ dàng dùng giá trị mặc định khi một biến có giá trị null hoặc không tồn tại. Toán tử này đặc biệt hữu ích khi làm việc với dữ liệu có thể bị thiếu.
Cú pháp đặt ?? giữa biến cần kiểm tra và giá trị dự phòng:
<?php
$username = null;
$displayName = $username ?? "Guest";
echo $displayName; // Guest
?>PHP kiểm tra xem $username có phải là null không. Vì đúng như vậy, toán tử trả về "Guest" thay vào đó. Nếu $username có giá trị, giá trị đó sẽ được dùng.
<?php
$username = "Alice";
$displayName = $username ?? "Guest";
echo $displayName; // Alice
?>Toán tử kết hợp null (null coalescing operator) cũng hoạt động khi một biến (variable) chưa được định nghĩa, mà không gây ra lỗi:
<?php
// Biến (variable) $color chưa được định nghĩa ở đâu cả
$selectedColor = $color ?? "blue";
echo $selectedColor; // blue
?>Cách này giúp ?? gọn gàng hơn so với dùng toán tử ba ngôi cùng các kiểm tra isset(). Cách này rất phù hợp để cung cấp giá trị mặc định hợp lý khi dữ liệu có thể bị thiếu.
Thử thách
DễĐọc hai giá trị từ đầu vào: một chuỗi nickname và một chuỗi theme.
Dùng toán tử kết hợp null để xử lý các giá trị có thể bị thiếu:
- Tạo biến
$userNicknamevà gán giá trịnullcho biến đó. Sau đó, dùng toán tử kết hợp null để gán cho$displayNicknamegiá trị của$userNicknamenếu biến này tồn tại và không phải là null, nếu không thì dùng giá trị đầu vàonickname. - Tạo biến
$userThemevà gán giá trị đầu vàothemecho biến đó. Dùng toán tử kết hợp null để gán cho$selectedThemegiá trị của$userThemenếu biến này tồn tại và không phải là null, nếu không thì dùngdarklàm giá trị mặc định. - Dùng trực tiếp toán tử kết hợp null với biến chưa được định nghĩa
$language(không định nghĩa biến này) để gán cho$displayLanguagegiá trị của$languagenếu biến này tồn tại, nếu không thì dùngEnglishlàm giá trị mặc định.
In từng kết quả trên một dòng mới theo thứ tự sau: $displayNickname, $selectedTheme, $displayLanguage.
Ví dụ:
Nếu đầu vào là Player1 và light, đầu ra sẽ là:
Player1
light
EnglishNếu đầu vào là GuestUser và blue, đầu ra sẽ là:
GuestUser
blue
EnglishTự làm thử
<?php
// Đọc đầu vào
$nickname = trim(fgets(STDIN));
$theme = trim(fgets(STDIN));
// TODO: Viết code của bạn bên dưới
// 1. Tạo $userNickname với giá trị null, rồi dùng ?? để gán giá trị cho $displayNickname
// 2. Tạo $userTheme với giá trị đầu vào của theme, rồi dùng ?? để gán giá trị cho $selectedTheme (giá trị mặc định: văn bản chính xác trong hướng dẫn)
// 3. Dùng ?? với $language chưa được định nghĩa để gán giá trị cho $displayLanguage (giá trị mặc định: văn bản chính xác trong hướng dẫn)
// In kết quả ra (mỗi kết quả trên một dòng mới)
echo $displayNickname . "\n";
echo $selectedTheme . "\n";
echo $displayLanguage . "\n";
?>Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức cơ bản
4Toán tử so sánh và logic
Toán tử so sánhBằng nhau và đồng nhấtToán tử logic phần 1Toán tử logic phần 2Ôn tập: logic đơn giản2Biến và kiểu dữ liệu
SốChuỗi và dấu ngoặc képGiá trị BooleanQuy ước đặt tênÔn tập: khởi tạo biếnBiến rỗngNối chuỗiNhận đầu vào từ người dùngChuyển đổi sang kiểu dữ liệu khác5Logic điều kiện
Câu lệnh ifIf và elseToán tử ba ngôiToán tử kết hợp nullCâu lệnh switchÔn tập: đưa ra quyết định3Các toán tử cơ bản
Toán tử số họcToán tử chia lấy dưToán tử lũy thừaPhép gán kết hợpTăng/giảmThứ tự ưu tiên của toán tửÔn tập: phép tính đơn giảnToán tử chuỗiTự luyện tập: Trình biên dịch PHP online