Bài 4. Kiểu dữ liệu

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.

40 phútCơ bản
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ểuVí dụGhi chú
int42, -7, 0x1A, 1_000_000Số nguyên, dấu _ để dễ đọc
float3.14, 1.5e3Số 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
booltrue, falseKết quả so sánh
array[1, 2, 3], ["ten" => "An"]Mảng (bài 9)
objectnew DateTime()Đối tượng (bài OOP)
nullnullChư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à null
Mẹ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
  1. 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.
  2. So sánh "1e3" == "1000" và "1e3" === "1000", giải thích.
  3. Liệt kê 6 giá trị được coi là false, kiểm chứng bằng var_dump((bool)...).
  4. Đế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.