Bài 16: Hai hàm kiểm tra isset và empty trong PHP

Bài 16: Hai hàm kiểm tra isset và empty trong PHP

Hàm isset và empty thường được gọi là hàm kiểm tra trong PHP. Hầu hết ai đang lập trình thì chắc chắn sẽ không bỏ qua được 2 hàm này.

Ở bài trước sonnguyenaz.com và các bạn đã cùng tìm hiểu về lệnh require và include trong PHP rồi các bạn đã thử làm các ví dụ mới chưa ạ?

Hôm nay hay cùng tiếp tục tìm hiểu xem hai hàm trên sử dụng như thế nào qua các ví dụ nhé.

Hàm isset trong PHP

Hàm isset trong PHP được dùng để kiểm tra sự tồn tại của một biến hay một dữ liệu nào đó trong PHP

Nếu không sử dụng insset trong các trường hợp không tồn tại của biến thì ngay lập tức code của bạn sẽ bị lỗi.

Cách sử dụng: isset(bien_can_kiem_tra)

Ví dụ: kiểm tra xem số 9 có phải số chẵn hay không

<?php 
if(9%2==0)
{
	$ketqua='Số 9 là số chẵn';
}
echo $ketqua;
?>

Nếu với đoạn code trên thì biến $ketqua không tồn tại nên bạn echo ra chắc chắn sẽ bị báo lỗi sau:

khi-khong-su-dung-ham-insset-trong-php

Để khắc phục bạn sử dụng hàm insset để kiểm tra xem biến $ketqua có được khởi tạo hay chưa(tồn tại khay không) làm như sau:

<?php 
if(9%2==0)
{
	$ketqua='Số 9 là số chẵn';
}
echo isset($ketqua)?$ketqua:'số 9 là số lẻ';
?>

Trên đây là cách viết rút gọn của hàm if, else trong PHP bạn có thể xem lại bài viết.

Hoặc ở ví dụ này bạn kiểm tra mảng array trong PHP có tồn tại hay không

<?php 
$k=1;
if($k==1)
{
	//khởi tạo mảng
	$mang=array(
	'loai1'=>'coc',
	'loai2'=>'oi',
	'loai3'=>'xoai',
	'loai4'=>'cam'
	);
}
if(!isset($mang)){
	echo 'mảng không tồn tại';
}
else{
	echo 'mảng đã tồn tại';
}
//kết quả: mảng đã tồn tại
?>

Giải thích: Nếu bạn muốn kiểm tra không tồn tại thì bạn đặt dấu ! trước isset: !isset(bien_can_kiem_tra)

Hàm empty trong PHP

Hàm empty trong PHP cũng là hàm dùng để kiểm tra xem biến đó có tồn tại hay không, nhưng ngoài ra nó cũng có thể kiểm tra được biến đó có rỗng hoặc không có giá trị hay không.

Biến rỗng thì có các giá trị sau: 0,’0′,NULL, false, “”.

Để hiểu rõ hơn ta xem qua các ví dụ

Giả sử ta có biến $a và gán cho các giá trị ở trên:

<?php 
$a = '0';
var_dump(empty($a));
 //kết quả: true
$a1 = 0;
var_dump(empty($a1));
//kết quả: true
$a2 = '';
var_dump(empty($a2));
 //kết quả: true
$a3 = FALSE;
var_dump(empty($a3));
//kết quả: true
$a4 = NULL;
var_dump(empty($a4));
 //kết quả: true
var_dump(empty($a5));
//kết quả: true
?>

Tất cả đều trả về true trường hợp với biến $a5 chưa khởi tạo thì nó cũng trả về true luôn.

Bởi vậy nếu sử dụng empty thì khả năng kiểm soát lỗi của biến đầu vào sẽ mạnh hơn là isset.

Ví dụ tiếp theo: Giả sử ta có tạo một form đăng ký, khi đó cần phải kiểm tra người dùng nhập dữ liệu để đăng ký vào có đúng quy định hoặc bỏ trống không thì làm như sau:

<?php 
if (isset($_POST['gui_dang_ky']))
{
	if(empty($_POST['hoten']) || empty($_POST['taikhoan'] || empty($_POST['email'] || empty($_POST['sdt'])){
		echo 'Bạn cần nhập đầy đủ thông tin đăng ký';
	}
	else{
		$hoten=$_POST['hoten'];
		$taikhoan=$_POST['taikhoan'];
		$email=$_POST['email'];
		$sdt=$_POST['sdt'];
	}

}
?>

Chúng ta sẽ kiểm tra một trong những trường nhập vào trong form rỗng thì sẽ báo lỗi, còn nếu thỏa mãn mới gán giá trị cho biến.

Nếu làm việc với mảng thì việc dùng hàm empty luôn phải được kiểm tra, để xem mảng có tồn tại hoặc có bị rỗng hay không.

Vì khi chúng ta dùng lệnh foreach để giải mạng thì sẽ bị lỗi:

<?php 
$mang=array();
if(!empty($mang)){
	foreach($mang as $key => $value)
	{
		//-----
	}
}
?>

Cũng tương tự như isset để kiểm tra sự tồn tại và không rỗng của biến ta sử dụng: !empty

Lời kết

Hai hàm kiểm tra isset và empty trong PHP luôn được sử dụng khi bạn lập trình bởi vì nếu không kiểm tra biến trước khi làm một cái gì đó thì sẽ dẫn đến lỗi và code của bạn không chạy được.

Nhưng theo mình nên sử dụng empty để kiểm tra thì tốt hơn bởi nó đã bao gồm cả isset trong đó rồi.

Cảm ơn các bạn đã theo dõi bài viết này.

Rate this post

sonnguyen

Là một nhân viên IT thích chia sẻ những gì mình biết đến tất cả mọi người. Hi vọng được mọi người ủng hộ, nếu có gì sai sót mong các bạn comment xuống dưới để mình khắc phục. Cảm ơn mọi người!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *