Try catch trong PHP
Ngoại lệ, error và xử lý ngoại lệ là những khái nhiệm rất quen thuộc đối với tất cả các lập trình viên. Bài viết này trình bày các vấn đề liên quan đến Exception trong PHP. PHP có cung cấp các cơ chế giúp bắt lỗi, giám sát các lỗi và xử lý các lỗi có thể xảy ra khi lập trình. Show
Trong nhiều ứng dụng lớn, có thể mở rộng, trong các ứng dụng hướng đối tượng và các frameworks thì việc bắt được các Exception trong quá trình develop là điều cực kì tốt. Xử lý ngoại lệ trong PHP – PHP Exceptions Ngoại lệ (Exception) trong PHP là gì?Bạn có thể hiểu nôm na ngoại lệ như sau: Trong lập trình chúng ta sẽ tạo ra những đoạn code, hàm, mảng mới mong muốn nó thực hiện một hành động nào đó trong chương trình. Như vậy, tất cả các hành động có thể xảy ra mà khác với mong muốn đó thì nó chính là ngoại lệ (Exception). Và chúng ta sẽ không bao giờ muốn cho chương trình của mình hoạt động sai mong muốn phải không nào. Vì thế mà ta cần xử lý ngoại lệ để tránh những ngoại lệ đó phá hỏng chương trình. Trái ngược với hệ thống xử lý lỗi trong PHP, xử lý ngoại lệ là phương pháp hướng đối tượng để xử lý lỗi, cung cấp hình thức báo cáo lỗi linh hoạt và có kiểm soát hơn. Các phương pháp xử lý ngoại lệ trong PHP
Xử lý ngoại lệ (Exception Handling) trong PHPSử dụng try, throw và catchTa sẽ có một số khái niệm cần lưu ý dưới đây: Try − Một hàm sử dụng một exception nên nằm trong khối try. Nếu exception không xảy ra( không được kích hoạt), code sẽ tiếp tục như bình thường. Tuy nhiên, nếu exception xảy ra ( được kích hoạt) thì exception đó sẽ bị “thrown”. Throw − Đây là cách bạn kích hoạt một exception. Mỗi “thrown” phải có ít nhất một “catch”. Catch − Mỗi khối “catch” bắt một exception và tạo một đối tượng chứa thông tin của exception đó. Cú pháp tổng quát của try catchVí dụ: Before try block"; try { echo " Kết quả: Before try block Inside try block After catch (will be always executed) Before try block Inside try block Exception Caught: Number is zero. After catch (will be always executed) Trong đó Hàm demo() kiểm tra nếu một số có bằng 0 hay không. Nếu điều kiện đúng ngoại lệ được ném ra. Khối “catch” lấy ra ngoại lệ và tạo ra một đối tượng ($e) chứa thông tin ngoại lệ. Thông báo lỗi từ ngoại lệ được lặp lại bằng cách gọi $e->getMessage() từ đối tượng ngoại lệ. Trong ví dụ trên, hàm $e->getMessage() được sử dụng để lấy error message. Không chỉ có mỗi một hàm đó, dưới đây là một số hàm có thể được sử dụng từ lớp Exception trong PHP. Một số hàm lấy error message
Từ ví dụ về try catch trên ta có thể thêm như sau: Before try block"; try { echo " Before try block Inside try block After catch (will be always executed) Before try block Inside try block Exception Caught: Number is zero. Exception Caught: C:\wamp64\www\webdemo\index2.php Exception Caught: 0 Exception Caught: 14 Exception Caught: #0 C:\wamp64\www\webdemo\index2.php(41): demo(0) #1 {main} After catch (will be always executed) Tạo lớp ngoại lệ tuỳ chỉnhĐể tạo một trình xử lý ngoại lệ tùy chỉnh, bạn phải tạo một lớp đặc biệt với các hàm có thể được gọi khi một ngoại lệ xảy ra trong PHP. Lớp này phải được kế thừa lớp Exception. 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); ?> Kết quả: Before try block"; try { echo "2 Đầu tiên ta sẽ tạo một class có tên myException được kế thừa từ class Exception, như vậy, nó sẽ kế thừa tất cả các phương thức và thuộc tính từ lớp Exception. Trong class trên sẽ tạo một hàm get_message để thông báo lỗi nếu một số truyền vào bằng 0. Ra khỏi class, ta dựng một hàm demo() với nội dung bên trong thực hiện try catch để kiểm tra xem số truyền vào có bằng 0 không. Nếu số bằng 0, một ngoại lệ sẽ được ném và sau đó khối catch sẽ bắt được ngoại lệ về rồi hiển thị ra thông tin lỗi. Xử lý nhiều ngoại lệ – Multiple ExceptionsMultiple Exceptions là cách sử dụng nhiều block try…catch để cố gắng bắt các ngoại lệ được ném ra. Ở phương pháp này chúng ta có thể sử dụng các câu lệnh điều khiển như if…else, switch, hoặc các ngoại lệ lồng vào nhau. Cú pháp tổng thểtry { // Some code... } catch (ExceptionType1 | ExceptionType2 $e) { // Code to handle the exception } catch (\Exception $e) { // ... } Ví dụ:
Kết thúcBài viết trên mình đã liệt kê một vài cách để xử lý ngoại lệ trong lập trình PHP. Mỗi bài viết về kiến thức học PHP của mình đều có thể chưa hoàn toàn đầy đủ, cho nên mong các bạn hãy tra google khi tham khảo và mong bạn có thể gửi lại comment bổ sung bên dưới để mình có thể hoàn thiện lại bài viết hơn. Cảm ơn các bạn!
|