Bài 26: Hàm isset() và empty() trong php

Hàm isset() trong PHP mình cũng đã sử dụng khá nhiều lần trong series này rồi nhưng vẫn có một số bạn mail hỏi sự khác nhau giữa hàm isset() và ...

Hàm isset() trong PHP mình cũng đã sử dụng khá nhiều lần trong series này rồi nhưng vẫn có một số bạn mail hỏi sự khác nhau giữa hàm isset() và hàm empty() trong PHP như thế nào?, khi nào thì sử dụng hàm isset() và khi nào thì sử dụng hàm empty()? Nên trong bài này mình sẽ giới thiệu hai hàm này và hướng dẫn cách sử dụng nó, cũng như là sự khác nhau của nó.

1. Hàm isset trong PHP

Hàm isset() đượ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
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à ta không chắc chắn là biến đó luôn tồn tại thì 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 (xem bài post và get trong php) 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.

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

Trong thuật toán phân trang chú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ái page=x đó đi thì chương trình sẽ bị lỗi ngay.

$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
// Mệnh đề if này không được thực hiện
// => biến $sologan ko tồn tại
$website = 'code24h.com';
if ($website != 'code24h.com'){
    $sologan = 'Đây không phải là website code24h.com';
}
 
// 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 trong mệnh đề if khô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ụng hàm isset() trong php.

2. Hàm empty() trong PHP

BẢNG MÃ KÍCH HOẠT KHÓA HỌC RẤT RẺ

Mình đã sưu tầm các mã giám giá rất rẻ và đăng nó ơ trong bài viết này, bạn hãy vào tham khảo để xem cần kháo nào thì hãy chọn cho riêng mình nhé, Lưu ý la chỉ có tại code24h.com, bạn sẽ không thể tìm thấy ở chỗ khác.

Xem Ngay

Hàm empty() trong php dùng để kiểm tra một biến nào đó có giá trị rỗng hoặc chưa được khởi tạo hay không. 

Giả sử ta có biến $var và giá trị của nó sẽ là rỗng nếu nó nằm một trong 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àm empty() 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àm isset() đúng không nào.

Ví dụ: Ví dụ các trường hợp trên
$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àm empty() 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àm empty() để validate dữ liệu bởi vì nó có thêm chức năng của hàm isset() 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
if (empty($_POST['username'])){
    echo 'Bạn chưa nhập tên đăng nhập';
}

Nếu sử dụng hàm isset() thì ta sẽ làm như sau:

$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àm empty() thì nhìn code gọn hơn phải không nào.

3. 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() 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ụng isset() và khi nào nên sử dụng empty(). 

Và có một điểm mình muốn nhấn mạnh khi sử dụng hàm empty() đó 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àm isset() nên ta có thể nói hàm empty() có luôn chức năng của hàm isset().

BÀI KẾ SAU
BÀI KẾ TIẾP

Nguồn: code24h.com

Bài liên quan

Cách giải quyết lỗi khi sử dụng hàm file_get_contents() và file() trong PHP

file_get_contents() là một hàm có chức năng là đọc nội dung từ 1 file và chuyển nó sang dạng chuỗi, nó thường được sử dụng để lấy nội dụng những trang web trên mạng, tuy nhiên có một số server đã vô hiệu hóa chức năng này , và khi đó nếu bạn sử dụng hàm file_get_contents() hay file() thì ...

Tạ Quốc Bảo viết 3 tuần trước

Hàm ngày và tháng trong PHP

Hàm date() trong PHP được sử dụng để định dạng ngày và thời gian. Hàm Date() trong PHP Hàm Date() trong PHP được sử dụng để định dạng một nhãn thời gian, từ đó giúp cho việc đọc giữ liệu vè ngày và thời gian trở nên đơn giản hơn. Ta có cú pháp như sau: ...

Tạ Quốc Bảo viết 14:34 ngày 07/09/2018

Tìm hiểu hàm isset() và empty() trong php

Hướng dẫn kết nối cơ sở dữ liệu MYSQL sử dụng MYSQLI Hướng dẫn xây dựng chức năng đăng ký thành viên với php và mysql Tìm hiểu sự khác nhau giữa hàm isset() và empty(), phân biệt khi nào nên sử dụng chúng. Mình sẽ hướng dẫn bạn tìm hiểu ngay sau đây Nhiều bạn đặt câu hỏi với mình là ...

Trần Trung Dũng viết 17:19 ngày 04/09/2018

Bài 07: Hiểu hơn về hàm call() và apply() trong Javascript

Trước đây khi viết Javascript mình đã rất thắc mắc sự khác biệt và khi nào nên sử dụng hàm call() và hàm apply() , đương nhiên Javacript không ...

Tạ Quốc Bảo viết 09:47 ngày 03/08/2018

Bài 26: Hàm isset() và empty() trong php

Hàm isset() trong PHP mình cũng đã sử dụng khá nhiều lần trong series này rồi nhưng vẫn có một số bạn mail hỏi sự khác nhau giữa hàm isset() và ...

Bùi Văn Nam viết 09:37 ngày 03/08/2018
0