PHP có các kiểu vô hướng (int, float, string, bool), kiểu phức hợp (array, object) và null. Bài này giải thích từng kiểu, chuyển đổi kiểu tự động và tường minh, so sánh == với === và các hàm kiểm tra kiểu.
Bạn sẽ học được
- Nhận biết các kiểu dữ liệu của PHP
- Hiểu chuyển kiểu tự động (type juggling) và ép kiểu
- Phân biệt == và ===
- Dùng is_*, gettype, var_dump, settype
Thuật ngữ cần biết
- Vô hướng
- int, float, string, bool: một giá trị đơn.
- Phức hợp
- array, object: chứa nhiều giá trị.
- Type juggling
- PHP tự đổi kiểu khi cần, ví dụ "5" + 3 = 8.
- Ép kiểu (cast)
- (int), (float), (string), (bool), (array).
Khái niệm và lý thuyết
| Kiểu | Ví dụ | Ghi chú |
|---|---|---|
| int | 42, -7, 0x1A, 1_000_000 | Số nguyên, dấu _ để dễ đọc |
| float | 3.14, 1.5e3 | Số thực; không so sánh bằng tuyệt đối |
| string | "Xin chào", 'a' | Chuỗi UTF-8; dùng hàm mb_* cho tiếng Việt |
| bool | true, false | Kết quả so sánh |
| array | [1, 2, 3], ["ten" => "An"] | Mảng (bài 9) |
| object | new DateTime() | Đối tượng (bài OOP) |
| null | null | Chưa có giá trị |
PHP tự chuyển kiểu theo ngữ cảnh: "10" + 5 cho 15 (số), 10 . 5 cho "105" (chuỗi). Tiện nhưng dễ gây lỗi ngầm, vì vậy khi so sánh hãy dùng === (so cả kiểu) và bật strict_types cho hàm.
Số và chuỗi
<?php
$n = 7; $f = 7.0; $s = "7";
var_dump($n == $f); // true (giá trị bằng)
var_dump($n === $f); // false (khác kiểu int/float)
var_dump($n == $s); // true
var_dump($n === $s); // false
var_dump(0.1 + 0.2 == 0.3); // false! sai số số thực
var_dump(abs(0.1 + 0.2 - 0.3) < 1e-9); // true: so sánh có dung sai
echo intdiv(7, 2), " ", 7 % 2, " ", 7 / 2; // 3 1 3.5
echo strlen("Tây Bắc"), " ", mb_strlen("Tây Bắc"); // 9 7 (byte vs ký tự)Chuyển kiểu
<?php
$gia = "25000đ";
echo (int)$gia; // 25000: lấy phần số đầu chuỗi
echo (int)"abc"; // 0
echo (float)"3.5kg"; // 3.5
var_dump((bool)"0"); // false (chuỗi "0" là false!)
var_dump((bool)"0.0"); // true
var_dump((bool)[]); // false (mảng rỗng)
$so = intval("12abc"); // 12
settype($gia, "integer"); var_dump($gia);Giá trị được coi là false: 0, 0.0, "", "0", null, mảng rỗng. Mọi thứ khác là true.
Kiểm tra kiểu và null
<?php
$x = null;
var_dump(is_null($x), isset($x), empty($x)); // true false true
var_dump(is_int(5), is_string("a"), is_numeric("3.5"), is_array([]));
echo gettype(3.14); // double
$ten = $_GET["ten"] ?? "Khách"; // toán tử ?? : mặc định nếu null
echo $nguoi?->ten; // nullsafe: null nếu $nguoi là nullMẹo hay
Dùng var_dump() thay vì echo khi gỡ lỗi: bạn thấy cả kiểu lẫn giá trị, kể cả mảng và null.
Lưu ý
"abc" == 0 là false từ PHP 8 (trước đó là true). Dù vậy, hãy luôn dùng === để khỏi nhớ các ngoại lệ.
Thực hành
- Viết chương trình nhận điểm từ URL (?diem=8.5), ép sang float và cho biết đạt hay không.
- So sánh "1e3" == "1000" và "1e3" === "1000", giải thích.
- Liệt kê 6 giá trị được coi là false, kiểm chứng bằng var_dump((bool)...).
- Đếm số ký tự của một câu tiếng Việt bằng strlen và mb_strlen.
Tóm tắt bài học
- 8 kiểu: int, float, string, bool, array, object, null (và resource).
- PHP tự chuyển kiểu; dùng === để so sánh an toàn.
- Ép kiểu bằng (int), (float)...; chú ý giá trị false.
- isset, empty, ??, ?-> xử lý null.