Bạn vừa chạy code và thấy ngay một dòng đỏ chói: Undefined variable? Đừng hoảng — đây là lỗi cực kỳ phổ biến, kể cả với người đã code nhiều năm. Bài viết này giải thích rõ undefined variable là gì, tại sao nó xảy ra, và cách sửa dứt điểm trong cả PHP lẫn JavaScript.
Undefined variable là gì?
Khi bạn cố sử dụng một biến chưa được khai báo hoặc chưa được gán giá trị, chương trình không biết biến đó là gì — và nó báo lỗi “undefined variable” để cảnh báo bạn.
Hãy nghĩ đơn giản thế này: bạn nhờ người bạn lấy hộp bút tên “hopXanh” trên bàn — nhưng trên bàn không có hộp nào tên đó cả. Người bạn sẽ nói “không tìm thấy” — máy tính cũng làm y vậy.
Thông báo lỗi trông như thế nào?
Mỗi ngôn ngữ hiển thị lỗi này theo cách riêng. Biết cách đọc thông báo lỗi giúp bạn tìm ra vấn đề nhanh hơn nhiều.
Trong PHP
// Thông báo lỗi PHP:
Warning: Undefined variable $tenHang on line 8
// ^^^^^^^^^ Loại cảnh báo
// ^^^^^^^^ Tên biến bị lỗi
// ^^^^^^ Dòng code gây ra lỗiTrong JavaScript
// Thông báo lỗi JavaScript:
ReferenceError: tenHang is not defined
// ^^^^^^^^^^^^^^ Loại lỗi — biến không tồn tại trong scope hiện tại
// ^^^^^^^ Tên biến bị lỗi💡 Mẹo đọc lỗi: Luôn nhìn vào: (1) tên biến bị lỗi, (2) số dòng — rồi lên đúng dòng đó kiểm tra ngay.
Nguyên nhân phổ biến gây undefined variable
Nguyên nhân 1: Quên khai báo biến trước khi dùng
Đây là nguyên nhân số 1 — bạn dùng biến mà chưa tạo ra nó.
// ❌ PHP — dùng biến chưa khai báo
echo $tongTien; // Warning: Undefined variable $tongTien
// ✅ Cách sửa — khai báo trước khi dùng
$tongTien = 0;
echo $tongTien; // 0// ❌ JavaScript — dùng biến chưa khai báo
console.log(tongTien); // ReferenceError: tongTien is not defined
// ✅ Cách sửa
let tongTien = 0;
console.log(tongTien); // 0Nguyên nhân 2: Viết sai tên biến (typo)
PHP và JavaScript đều phân biệt chữ hoa/thường. $TenUser và $tenUser là hai biến hoàn toàn khác nhau.
// ❌ Khai báo một tên, dùng tên khác
$tenUser = "Minh";
echo $TenUser; // Warning: Undefined variable $TenUser
// ✅ Phải đúng chính xác từng chữ
echo $tenUser; // "Minh"⚠️ Lưu ý: Hãy đặt tên biến nhất quán theo một quy tắc — ví dụ luôn dùng
camelCase— để tránh nhầm lẫn.
Nguyên nhân 3: Biến khai báo trong scope khác
Biến khai báo bên trong hàm không tồn tại ở ngoài hàm — và ngược lại (trong PHP, biến ngoài không tự vào trong hàm).
// ❌ PHP — biến global không tự vào trong function
$diemThi = 8.5;
function xepLoai() {
echo $diemThi; // Warning: Undefined variable $diemThi
}
xepLoai();
// ✅ Cách sửa — dùng global hoặc truyền tham số
function xepLoai($diem) {
echo $diem; // 8.5
}
xepLoai($diemThi);// ❌ JavaScript — biến trong block không ra ngoài được (let/const)
if (true) {
let ketQua = "Đạt";
}
console.log(ketQua); // ReferenceError: ketQua is not defined
// ✅ Khai báo ở scope phù hợp
let ketQua;
if (true) {
ketQua = "Đạt";
}
console.log(ketQua); // "Đạt"Nguyên nhân 4: Biến phụ thuộc vào điều kiện chưa chạy
Bạn khai báo biến bên trong if, nhưng điều kiện không thỏa — biến không bao giờ được tạo ra.
// ❌ Nếu $tuoi < 18, biến $vaiTro không được tạo
if ($tuoi >= 18) {
$vaiTro = "Thành viên";
}
echo $vaiTro; // Warning nếu $tuoi < 18!
// ✅ Luôn khởi tạo giá trị mặc định
$vaiTro = "Khách"; // giá trị mặc định
if ($tuoi >= 18) {
$vaiTro = "Thành viên";
}
echo $vaiTro; // Luôn an toànCách sửa và phòng tránh undefined variable
Quy tắc vàng: Luôn khởi tạo biến trước khi dùng
// ✅ Thói quen tốt — khai báo và gán giá trị mặc định ngay
$ten = "";
$tuoi = 0;
$danhSach = [];
$isAdmin = false;Trong PHP: Dùng isset() để kiểm tra an toàn
// Kiểm tra biến tồn tại trước khi dùng
if (isset($tenUser)) {
echo "Xin chào, " . $tenUser;
} else {
echo "Chưa có tên người dùng";
}
// Hoặc dùng toán tử ?? (null coalescing) — PHP 7+
$ten = $tenUser ?? "Khách"; // Nếu $tenUser chưa có → dùng "Khách"
echo $ten;Trong JavaScript: Dùng typeof hoặc optional chaining
// Kiểm tra bằng typeof
if (typeof tenUser !== "undefined") {
console.log("Xin chào, " + tenUser);
}
// Optional chaining cho object (ES2020)
const ten = user?.name ?? "Khách";
console.log(ten); // Không lỗi dù user là undefinedTìm hiểu thêm về cách xử lý biến an toàn trên tài liệu chính thức PHP và MDN Web Docs.
| Tình huống | PHP | JavaScript |
|---|---|---|
| Kiểm tra biến tồn tại | isset($bien) | typeof bien !== 'undefined' |
| Giá trị mặc định | $bien ?? "mặc định" | bien ?? "mặc định" |
| Biến toàn cục trong hàm | global $bien; | Khai báo ngoài hàm |
| Kiểm tra key trong array/object | array_key_exists() | hasOwnProperty() |
Tóm tắt
Qua bài này bạn đã nắm được:
- ✅ Undefined variable xảy ra khi dùng biến chưa khai báo hoặc nằm ngoài scope
- ✅ 4 nguyên nhân chính: quên khai báo, viết sai tên, sai scope, biến trong điều kiện chưa chạy
- ✅ Cách đọc thông báo lỗi để tìm đúng vị trí gây lỗi
- ✅ Dùng
isset(),??trong PHP vàtypeof, optional chaining trong JavaScript để code an toàn hơn
🎯 Thử ngay
- Chạy đoạn code sau và đọc thông báo lỗi:
echo $diaChi;trong PHP — lỗi ở dòng nào? Biến nào bị lỗi? - Sửa đoạn code PHP này cho đúng: khai báo
$tongDiem = 0, rồi cộng thêm điểm từ một mảng$diem = [7, 8, 9]bằng vòng lặp. - Viết một đoạn JavaScript kiểm tra xem biến
usernamecó tồn tại không — nếu có thì in ra, nếu không thì in “Chưa đăng nhập”.