PHP
PHP

Trang chủ

Exception handling – Xử lý ngoại lệ trong PHP

PHP, viết tắt của Hypertext Preprocessor, là ngôn ngữ lập trình script phía máy chủ được thiết kế đặc biệt cho phát triển web. Điểm nổi bật của PHP so với các ngôn ngữ khác là khả năng tương thích với nhiều loại cơ sở dữ liệu và chạy mượt mà trên các máy chủ web. Tại Vietnix, chúng tôi không chỉ giới thiệu những khái niệm cơ bản về PHP mà còn cung cấp các ví dụ thực tế giúp bạn dễ dàng hiểu và áp dụng PHP vào việc phát triển website. Bên cạnh đó, Vietnix cũng thường xuyên cập nhật các bài viết mới về tính năng, mẹo và thủ thuật lập trình, giúp bạn giải quyết các thách thức phức tạp, từ đó không ngừng nâng cao và hoàn thiện kỹ năng lập trình của mình.
html
CSS
javascript
sql
python
php
c
c++
bootstrap
react
mysql
reactjs
vuejs
Javascript Tutorials
20/06/2024
6 phút đọc
Theo dõi Vietnix trên

Exception handling – Xử lý ngoại lệ trong PHP

Exception handling, xử lý ngoại lệ trong PHP, cho phép bạn quản lý và xử lý các tình huống ngoại lệ xảy ra trong chương trình. Những tình huống này có thể bao gồm lỗi, trạng thái không mong muốn hoặc các điều kiện đặc biệt khác có thể xảy ra trong quá trình thực thi chương trình. Exception handling là một phần quan trọng trong việc viết mã PHP chất lượng cao và đảm bảo tính tin cậy của ứng dụng. Hãy cùng Vietnix tìm hiểu thêm về chủ đề xử lý ngoại lệ trong PHP qua bài viết dưới đây.

Exception handling là gì?

Ngoại lệ (exception) là một kết quả chương trình không mong muốn, có thể được xử lý bởi chính chương trình đó. Cách xử lý ngoại lệ trong PHP gần giống với xử lý ngoại lệ trong tất cả các ngôn ngữ lập trình khác.

Exception handling - Xử lý ngoại lệ trong PHP
Exception handling – Xử lý ngoại lệ trong PHP

Mọi người cũng xem:

Lợi ích của việc xử lý ngoại lệ trong PHP

Những ưu điểm chính của xử lý ngoại lệ so với xử lý lỗi:

  • Tách code xử lý lỗi khỏi code thông thường: Trong code xử lý lỗi truyền thống luôn có một block if-else để xử lý lỗi. Các điều kiện và code xử lý lỗi này dễ bị lẫn lộn nên không thể đọc được. Với code khối try-catch trở nên có thể đọc được.
  • Phân nhóm các loại lỗi: Trong PHP, cả các loại cơ bản và các đối tượng đều có thể được coi là ngoại lệ. Nó có thể tạo một hệ thống phân cấp các đối tượng ngoại lệ, nhóm các ngoại lệ trong không gian tên hoặc lớp và phân loại chúng theo loại.

Từ khóa – keyword

PHP cung cấp các từ khóa chuyên biệt sau đây cho mục đích này.

  • try: Nó đại diện cho một block code trong đó các ngoại lệ có thể phát sinh.
  • catch: Nó đại diện cho một block code sẽ được thực thi khi một ngoại lệ cụ thể được đưa ra.
  • throw: Nó được sử dụng để ném một ngoại lệ. Nó cũng được sử dụng để liệt kê các ngoại lệ mà một hàm đưa ra nhưng không tự xử lý.
  • finally: Nó được sử dụng thay cho block catch hoặc sau block catch, về cơ bản, nó được đặt cho hoạt động dọn dẹp trong code PHP.

Ví dụ minh hoạ

Quy trình của block try-catch thông thường trong PHP:

<?php

// PHP Program to illustrate normal
// try catch block code
function demo($var) {
	echo " Before try block";
	try {
		echo "\n Inside try block";
			
		// If var is zero then only if will be executed
		if($var == 0)
		{
				
			// If var is zero then only exception is thrown
			throw new Exception('Number is zero.');
				
			// This line will never be executed
			echo "\n After throw (It will never be executed)";
		}
	}
		
	// Catch block will be executed only
	// When Exception has been thrown by try block
	catch(Exception $e) {
			echo "\n Exception Caught", $e->getMessage();
		}
		
		// This line will be executed whether
		// Exception has been thrown or not
		echo "\n After catch (will be always executed)";
}

// Exception will not be raised
demo(5);

// Exception will be raised here
demo(0);
?>

Output như sau:

 Before try block
 Inside try block
 After catch (will be always executed)
 Before try block
 Inside try block
 Exception CaughtNumber is zero.
 After catch (will be always executed)

Quy trình của block try-catch và block finally trong PHP:

<?php

// PHP Program to illustrate normal
// try catch block code
function demo($var) {
	
	echo " Before try block";
	try {
		echo "\n Inside try block";
			
		// If var is zerothen only if will be executed
		if($var == 0) {
				
			// If var is zero then only exception is thrown
			throw new Exception('Number is zero.');
				
			// This line will never be executed
			echo "\n After throw it will never be executed";
		}
	}
		
	// Catch block will be executed only
	// When Exception has been thrown by try block
	catch(Exception $e) {
		echo "\n Exception Caught" . $e->getMessage();
	}
	finally {
		echo "\n Here cleanup activity will be done";
	}
		
	// This line will be executed whether
	// Exception has been thrown or not
	echo "\n After catch it will be always executed";
}

// Exception will not be raised
demo(5);

// Exception will be raised here
demo(0);
?>

Output như sau:

 Before try block
 Inside try block
 Here cleanup activity will be done
 After catch (will be always executed)
 Before try block
 Inside try block
 Exception CaughtNumber is zero.
 Here cleanup activity will be done
 After catch (will be always executed)

Sử dụng class Exception tùy chỉnh:

<?php
class myException extends Exception {
	function get_Message() {
		
		// Error message
		$errorMsg = 'Error on line '.$this->getLine().
					' in '.$this->getFile()
		.$this->getMessage().' is number zero';
		return $errorMsg;
	}
}

function demo($a) {
	try {
	
		// Check if
		if($a == 0) {
			throw new myException($a);
		}
	}
	
	catch (myException $e) {
	
		// Display custom message
		echo $e->get_Message();
	}
}

// This will not generate any exception
demo(5);

// It will cause an exception
demo(0);
?>

Output sẽ trả về thông báo như sau:

Error on line 20 in /home/45ae8dc582d50df2790517e912980806.php0 is number zero

Đặt top level exception handler: dùng hàm set_exception_handler()sẽ đặt tất cả các hàm do người dùng xác định thành tất cả các ngoại lệ chưa phát hiện.

<?php

// PHP Program to illustrate normal
// try catch block code

// Function for Uncaught Exception
function myException($exception) {
	
	// Details of Uncaught Exception
	echo "\nException: " . $exception->getMessage();
}

// Set Uncaught Exception handler
set_exception_handler('myException');
function demo($var) {
	
	echo " Before try block";
	try {
		echo "\n Inside try block";
			
		// If var is zero then only if will be executed
		if($var == 0)
		{
				
			// If var is zero then only exception is thrown
			throw new Exception('Number is zero.');
				
			// This line will never be executed
			echo "\n After throw (it will never be executed)";
		}
	}
		
	// Catch block will be executed only
	// When Exception has been thrown by try block
	catch(Exception $e) {
		echo "\n Exception Caught", $e->getMessage();
	}
		
	// This line will be executed whether
	// Exception has been thrown or not
	echo "\n After catch (will be always executed)";
		
	if($var < 0) {
		
		// Uncaught Exception
		throw new Exception('Uncaught Exception occurred');
	}
}

// Exception will not be raised
demo(5);

// Exception will be raised here
demo(0);

// Uncaught Exception
demo (-3);
?>

Output như sau:

 Before try block
 Inside try block
 After catch (will be always executed)
 Before try block
 Inside try block
 Exception CaughtNumber is zero.
 After catch (will be always executed)
 Before try block
 Inside try block
 After catch (will be always executed)
 Exception: Uncaught Exception occurred

Lời kết

Vietnix hy vọng nội dung bài viết trên đã giúp bạn hiểu rõ hơn về các Exception handling – Xử lý ngoại lệ trong PHP. Ngoài ra, bạn cũng có thể tham khảo thêm các bài viết khác tại vietnix.vn để hiểu hơn về lập trình, chúc bạn thành công!

Cao Lê Viết Tiến

PHP Leader
tại
Vietnix

Kết nối với mình qua

Icon Quote
Icon Quote

Học lập trình online cùng vietnix

Học lập trình online cùng Vietnix

PHPXem thêmThu gọn