Có những thứ "thấy vậy mà không phải vậy", đôi khi ta cứ đinh ninh...tắt đèn nhà ngói cũng như nhà tranh....Nhưng thật ra nhà ngói vẫn là nhà ngói, nhà tranh vẫn là nhà tranh, không hề giống nhau.
Bạn viết code login:<?php
if(isset($_POST['username'])){
echo "Có username";
}
?>
Chạy ngon 😎
Xong bạn sửa thành:
<?php
if(empty($_POST['username'])){
echo "Username rỗng";
}
?>
Website bắt đầu hành xử kỳ quái 🤡
👉 Lúc đúng.
👉 Lúc sai.
👉 Lúc login fail dù nhập đủ.
Và bạn bắt đầu...théc méc:
"Ủa… isset() với empty() khác nhau chỗ nào? Đúng là ảo ma canada" 😭
isset() vs empty() là gì?
Trong PHP:
-
isset()kiểm tra biến có tồn tại hay không -
empty()kiểm tra biến có "rỗng" hay không
Hai hàm nhìn khá giống nhau.
Nhưng behavior rất khác 😅
Ví dụ đời thường 🍜
Hãy tưởng tượng:
Bạn mở tủ lạnh 😎
isset() hỏi:
"Trong tủ có hộp sữa không?"
empty() hỏi:
"Hộp sữa có gì bên trong không?"
👉 Tưởng là "mại mại giống", nhưng thực tế là hai câu khác nhau hoàn toàn 😅
isset() hoạt động thế nào? 😎
<?php
$name = "Dat";
var_dump(isset($name));
?>
Kết quả:
true
👉 Vì biến tồn tại.
Nếu biến chưa tồn tại 😅
<?php
var_dump(isset($age));
?>
👉 Kết quả:
false
empty() hoạt động thế nào? 😎
<?php
$name = "";
var_dump(empty($name));
?>
👉 Kết quả:
true
👉 Vì biến "rỗng".
Điều nguy hiểm 😵
empty() coi rất nhiều thứ là “rỗng”.
Ví dụ:
empty("")
empty(0)
empty("0")
empty(null)
empty(false)
empty([])
👉 Tất cả đều:
true
🤡
Ví dụ "gây lú" kinh điển 😭
<?php
$age = 0;
if(empty($age)){
echo "Không có tuổi";
}
?>
👉 PHP nói:
Không có tuổi
Trong khi:
0
là giá trị hợp lệ 😅
Đây là lý do nhiều website bug 🤡
Ví dụ form nhập số lượng:
<?php
$quantity = $_POST['quantity'];
if(empty($quantity)){
echo "Vui lòng nhập số lượng";
}
?>
User nhập:
0
👉 PHP vẫn coi là rỗng 😭
isset() KHÔNG kiểm tra rỗng 😎
Ví dụ:
<?php
$name = "";
var_dump(isset($name));
?>
👉 Kết quả:
true
👉 Vì biến tồn tại 😅
So sánh cực dễ hiểu 😎
| Giá trị | isset() | empty() |
|---|---|---|
| chưa tồn tại | false | true |
| "" | true | true |
| "hello" | true | false |
| 0 | true | true |
| "0" | true | true |
| [] | true | true |
| null | false | true |
Ví dụ thực chiến InfinityFree 😭
Form login:
<?php
if(empty($_POST['username'])){
echo "Thiếu username";
}
?>
Nhưng trên điện thoại:
👉 browser autofill đôi khi gửi:
" "
(chỉ có space)
👉 empty() KHÔNG coi là rỗng 😅
Cách đúng 😎
<?php
$username = trim($_POST['username']);
if(empty($username)){
echo "Thiếu username";
}
?>
👉 trim() rất quan trọng 😎
Một lỗi newbie cực hay gặp 🤡
<?php
if(isset($_POST['age'])){
echo "Có tuổi";
}
?>
User nhập:
0
👉 isset = true 😎
Không có vấn đề.
Nhưng nếu dùng empty 😭
<?php
if(empty($_POST['age'])){
echo "Thiếu tuổi";
}
?>
👉 PHP coi:
0
là rỗng 🤡
Vậy dùng cái nào? 😵
👉 Câu trả lời là:
"Tùy mục đích" 😎
Dùng isset() khi 😎
✅ Kiểm tra biến có tồn tại không
Ví dụ:
isset($_POST['username'])
isset($_SESSION['user'])
isset($_GET['id'])
Dùng empty() khi 😎
✅ Kiểm tra user có nhập dữ liệu không
Ví dụ:
empty(trim($username))
Công thức "an toàn" 😎
Đây là kiểu rất phổ biến:
<?php
$username = trim($_POST['username'] ?? '');
if(empty($username)){
echo "Thiếu username";
}
?>
?? là gì? 😎
$_POST['username'] ?? ''
nghĩa là:
👉 Nếu tồn tại:
lấy username.
👉 Nếu chưa tồn tại:
dùng chuỗi rỗng.
Vì sao cách này mạnh? 🚀
👉 Tránh:
Undefined index
😎
Một ví dụ rất thực tế 😅
InfinityFree + form login.
User chưa submit form.
Bạn viết:
<?php
$username = $_POST['username'];
?>
👉 💀
Undefined array key
Cách đúng 😎
<?php
$username = $_POST['username'] ?? '';
?>
empty() có "nguy hiểm" không? 😅
→ Không.
Nhưng:
👉 phải hiểu behavior của nó 😎
Đặc biệt với:
- 0
- "0"
- false
Một mẹo rất quan trọng 😎
Nếu field là số:
👉 cẩn thận với empty() 😅
Ví dụ:
0
có thể là dữ liệu hợp lệ.
Ví dụ đời thường 🤡
Bạn hỏi:
"Nhà có ai không?"
Nếu trong nhà có:
- một em bé
- một con mèo
- ông nội đang ngủ
👉 vẫn là "có người".
Nhưng empty() đôi khi kiểu:
"Không thấy ai hoạt động nên tính là không có." 🤡
Checklist "chuẩn không cần chỉnh"
Dùng isset khi:
✅ kiểm tra tồn tại
✅ session
✅ POST/GET
✅ tránh Undefined index
Dùng empty khi:
✅ validate form
✅ kiểm tra chuỗi rỗng
✅ kiểm tra user có nhập không
Luôn nhớ 😎
0
và:
"0"
👉 empty() coi là rỗng 🤡
Tổng kết
isset() và empty() nhìn giống nhau.
Nhưng:
| Hàm | Ý nghĩa |
|---|---|
| isset() | Có tồn tại không? |
| empty() | Có rỗng không? |
👉 Đây là cặp hàm newbie PHP gặp mỗi ngày 😅
Hiểu sai một chút…
Login form có thể "toang" cả buổi 🤡
❓ FAQ nhanh
empty() có kiểm tra biến tồn tại không?
→ Có 😎
Nếu biến chưa tồn tại:
empty() trả về true.
isset() có kiểm tra rỗng không?
→ Không 😅
Biến rỗng vẫn có thể isset = true.
Vì sao empty(0) lại true?
→ Vì PHP coi:
- 0
- "0"
- false
là "empty" 😵
Form validation nên dùng gì?
→ Thường:
trim() + empty()
😎
👉 Bạn có thể cũng đang gặp: