Thứ Sáu, 29 tháng 5, 2026

isset() vs empty() khác nhau thế nào? (Hai ông nhìn giống nhau nhưng “tính cách” rất khác)

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()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: