Menu
CoddyTech

Bằng nhau và đồng nhất

Thuộc phần Kiến thức cơ bản trong hành trình PHP của Coddy. Bài học 24 trên 71.

PHP cung cấp hai cách để kiểm tra các giá trị có bằng nhau hay không: toán tử so sánh bằng (==) và toán tử đồng nhất (===). Hiểu rõ sự khác biệt này rất quan trọng để viết code đáng tin cậy.

Toán tử bằng nhau (==) so sánh các giá trị sau khi chuyển chúng về cùng kiểu dữ liệu. Đây được gọi là “so sánh lỏng”:

<?php
var_dump(5 == "5");    // bool(true): chuỗi (string) chuyển thành số
var_dump(0 == false);  // bool(true): 0 chuyển thành false
var_dump(1 == true);   // bool(true): 1 chuyển thành true
?>

Toán tử đồng nhất (===) so sánh cả giá trị và kiểu dữ liệu. Không có chuyển đổi nào xảy ra, vì vậy cả hai phải khớp chính xác:

<?php
var_dump(5 === "5");   // bool(false): int so với chuỗi
var_dump(5 === 5);     // bool(true): cùng kiểu dữ liệu và giá trị
var_dump(0 === false); // bool(false): int so với bool
?>

Để so sánh “không bằng”, hãy dùng != (lỏng) hoặc !== (nghiêm ngặt):

<?php
var_dump(5 != "5");    // bool(false): các giá trị bằng nhau
var_dump(5 !== "5");   // bool(true): các kiểu dữ liệu khác nhau
?>

Theo quy tắc thực hành tốt, hãy ưu tiên === và !== để tránh những bất ngờ do chuyển đổi kiểu dữ liệu ngoài ý muốn.

challenge icon

Thử thách

Dễ

Đọc hai giá trị từ đầu vào: một số (dưới dạng chuỗi) và một số nguyên.

Dùng các toán tử so sánh bằng và so sánh đồng nhất để đánh giá các phép so sánh sau, rồi in kết quả của từng phép trên một dòng mới bằng var_dump():

  1. Kiểm tra xem giá trị chuỗi có bằng số nguyên khi so sánh lỏng (==) hay không
  2. Kiểm tra xem giá trị chuỗi có bằng số nguyên khi so sánh chặt (===) hay không
  3. Kiểm tra xem giá trị chuỗi có khác số nguyên khi so sánh lỏng (!=) hay không
  4. Kiểm tra xem giá trị chuỗi có khác số nguyên khi so sánh chặt (!==) hay không

Lưu ý: Giữ giá trị thứ nhất ở dạng chuỗi, không ép kiểu. Ép kiểu giá trị thứ hai thành số nguyên.

Ví dụ:

Nếu đầu vào là 42 và 42, đầu ra sẽ là:

bool(true)
bool(false)
bool(false)
bool(true)

Giải thích:

  • "42" == 42 là true (các giá trị bằng nhau sau khi chuyển đổi kiểu)
  • "42" === 42 là false (chuỗi và số nguyên, khác kiểu dữ liệu)
  • "42" != 42 là false (các giá trị bằng nhau)
  • "42" !== 42 là true (khác kiểu dữ liệu)

Tự làm thử

<?php
// Đọc đầu vào
$stringValue = trim(fgets(STDIN));
$intValue = intval(trim(fgets(STDIN)));

// TODO: Viết code bên dưới
// Dùng var_dump() để in kết quả của mỗi phép so sánh trên một dòng mới:
// 1. Bằng nhau không nghiêm ngặt (==)
// 2. Bằng nhau nghiêm ngặt (===)
// 3. Khác nhau không nghiêm ngặt (!=)
// 4. Khác nhau nghiêm ngặt (!==)

?>
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch PHP online