Sự khác nhau giữa hàm isset() và hàm empty() trong PHP như thế nào?
Chủ đề: PHP / MySQLBài trước|Bài tiếp
Vấn đề thắc mắc về sự khác nhau giữa hàmisset()
và hàmempty()
trong PHP như thế nào?, khi nào thì sử dụng hàmisset()
và khi nào thì sử dụng hàmempty()
? thì không chỉ bạn mắc phải mà nhiều người cũng vẫn còn lúng túng trong khi sử dụng chúng.
Hàm isset trong PHP
Hàmisset()
được dùng để kiểm tra một biến nào đó đã được khởi tạo trong bộ nhớ của máy tính hay chưa, nếu nó đã khởi tạo (tồn tại) thì sẽ trả về TRUE và ngược lại sẽ trả về FALSE.
Ví dụ: Kiểm tra biến$domain
có tồn tại hay không
Ví dụ
if (isset($domain)){
echo 'Biến domain đã tồn tại';
}
else{
echo 'Biến domain chưa tồn tại';
}
Vậy khi nào thì sử dụng hàm isset()?
Như bạn biết nếu trong quá trình biên dịch nếu trong code có sử dụng một biến không tồn tại thì trình biên dịch sẽ ngưng xử lý và thông báo lỗi ngay, chính vì vậy thông thường những trường hợp mà takhông chắc chắn là biến đó luôn tồn tạithì trước khi sử dụng hãy kiểm tra nó.
Ví dụ: Lấy thông tin đăng ký từ form
Đây là ví dụ thông dụng nhất mà có lẽ nhiều ban newbie vẫn mắc phải. Thông thường khi lấy thông tin từ FORM thì bạn nên kiểm tra nó có tồn tại không rồi hãy lấy, nếu không người dùng sẽ sử dụng firebug đổi một số name của các thẻ input thì chương trình sẽ lỗi ngay.
Ví dụ
if (isset($_POST['submit']))
{
$fullname = isset($_POST['fullname']) ? $_POST['fullname'] : '';
$address = isset($_POST['address']) ? $_POST['address'] : '';
$email = isset($_POST['email']) ? $_POST['email'] : '';
$phone = isset($_POST['phone']) ? $_POST['phone'] : '';
}
Ví dụ: Lấy trang hiện tại trên URL dùng để phân trang
Trongthuật toán phân trangchúng ta lấy page trên URL để xác định record hiển thị cho trang đó. Chính vì page nằm trên URL nên rất nguy hiểm nếu như chúng ta lấy mà không kiểm tra nó tồn tại hay không vì nếu người dùng chỉ cần bỏ cáipage=x
đó đi thì chương trình sẽ bị lỗi ngay.
Ví dụ
$current_page = isset($_GET['page']) ? $_GET['page'] : '1';
Ví dụ: Thực hiện nối chuỗi trong khi biến$domain
chưa chắc chắn là tồn tại
Ví dụ
// Mệnh đề if này không được thực hiện
// => biến $sologan ko tồn tại
$website = 'vzn.vn';
if ($website != 'vzn.vn'){
$sologan = 'Đây không phải là website vzn.vn';
}
// Nên đoạn code này sai
$sologan .= ' vui lòng ghi rõ nguồn khi public nội dung này ở website khác';
Rõ ràng đoạn code này chạy sẽ bị lỗi ngay bởi vì biến$sologan
sẽ không tồn tại vì câu lệnh bên trongmệnh đềifkhông được chạy.
Trên là những ví dụ thông thường hay xảy ra trong thực tế nên vẫn còn khá nhiều trường hợp bạn nên sử dụnghàm isset() trong php.
Hàm empty() trong PHP
Hàmempty()
trong phpdùng để kiểm tra một biến nào đó có giá trị rỗng hoặc chưa được khởi tạohay không.
Giả sử ta có biến$var
và giá trị của nó sẽ là rỗngnếu nó nằm mộttrong các trường hợp sau:
$var = 0
hoặc$var = '0'
$var = NULL
$var = '';
$var = FALSE
$var
không tồn tại
Như vậy có 6 trường hợp hàmempty()
sẽ đúng. Tuy nhiên trường hợp cuối cùng là $var không tồn tại là hơi đặc biệt một chút, vấn đề này rất giống với hàmisset()
đúng không nào.
Ví dụ: Ví dụ các trường hợp trên
Ví dụ
$var = '0';
var_dump(empty($var));
$var = 0;
var_dump(empty($var));
$var = '';
var_dump(empty($var));
$var = FALSE;
var_dump(empty($var));
$var = NULL;
var_dump(empty($var));
var_dump(empty($bien_khong_ton_tai));
Trong đó ở ví dụ thứ 6 biến$bien_khong_ton_tai
chưa được khởi tạo nhưng vẫn không bị lỗi và khi sử dụng nó trong hàmempty()
thì sẽ trả về TRUE.
Vậy khi nào nên sử dụng hàm empty()?
Thông thường chúng ta sử dụng hàmempty()
để validate dữ liệu bởi vì nó có thêmchức năng của hàmisset()
nên sẽ không bao giờ xuất hiện lỗi.
Vi dụ: kiểm tra dữ liệu khi người dùng đăng nhập
Ví dụ
if (empty($_POST['username'])){
echo 'Bạn chưa nhập tên đăng nhập';
}
Nếu sử dụng hàmisset()
thì ta sẽ làm nhưsau:
Ví dụ
$username = isset($_POST['username']) ? $_POST['username'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';
if ($username == '') {
echo 'Bạn chưa nhập tên đăng nhập';
}
if ($password == '') {
echo 'Bạn chưa nhập mật khẩu';
}
Rõ ràng nếu ta dùng hàmempty()
thì nhìn code gọn hơn phải không nào.
Lời kết
Trong bài này mình đã giới thiệu hai hàm thường dùng để validate dữ liệu đó làhàm isset()vàhàm empty() trong php, mỗi hàm mình có liệt kê cách sử dụng nên từ đó bạn có thể suy ra khi nào nên sử dụngisset()
và khi nào nên sử dụngempty()
.
Và có một điểm mình muốn nhấn mạnh khi sử dụng hàmempty()
đó là hàm này sẽ trả về TRUE nếu biến kiểm tra không tồn tại, điều này rất giống với hàmisset()
nên ta có thể nói hàmempty()
có luôn chức năng của hàmisset()
.
Câu hỏi liên quan
Dưới đây là một số câu hỏi thường gặp khác liên quan đến chủ đề này:
- Làm sao tạo trang 404 trong PHP?
- Lỗi cannot be part of FULLTEXT index
- Làm sao xuất XMLWriter thành tệp XML trong PHP?
- Kết quả kiểu trả về JSON từ PHP Script
- Cách xóa ký tự cuối cùng khỏi chuỗi trong PHP
File: /home/vzn.vn/public_html/config/vzn.template.php(491) : eval()'d code
Line: 1