Ví dụ hướng dẫn sử dụng Try...Catch xử lý Lỗi và Ngoại lệ trong PHP

Ngày đăng: 04/06/2019   -    Cập nhật: 08/02/2020

1. Ngoại lệ (Exception) là cái khỉ gì?


Bạn đã nghe nhiều đến Bug (hay còn gọi là lỗi) hoặc ngoại lệ trong lập trình rồi nhỉ?


Ví dụ thế này, bỗng một ngày đẹp trời bạn lướt facebook và bấm thả tim vào ảnh Crush của mình.


Nhưng mà Fb lại bị lỗi khiến bạn không thể bấm thả tim được (Số trời định =))).


Yên tâm, đây chỉ là lỗi kỹ thuật thôi.


Điều này xảy ra mà các lập trình viên của Facebook không ngờ tới.


Một ví dụ nữa, khi bạn đăng bài Facebook chẳng hạn. Bạn muốn post tấm hình bạn vừa chụp lên Facebook, theo quy định thì Facebook sẽ giảm chất lượng của tất cả các tấm ảnh tải lên.


Nhưng hôm đấy máy chủ của Facebook bị "đơ" và không giảm dung lượng tấm ảnh của bạn.



Đây là một ngoại lệ, xảy ra bên ngoài các trường hợp thông thường.


Túm lại, để đơn giản.


Bạn có thể hiểu là, chúng ta lập trình và mong muốn nó hành động nào đó.


Và tất cả các hành động khác với mong muốn thì nó là ngoại lệ (Exception).


Dĩ nhiên là bạn sẽ không muốn những ngoại lệ này phá hỏng chương trình của bạn rồi.


Vì thế, bạn cần xử lý ngoại lệ.


Bài này mình sẽ giúp bạn hiểu thêm về:



  • Xử lý lỗi trong PHP
  • Ví dụ về xử lý lỗi trong PHP
  • Sự khác biệt giữa lỗi và ngoại lệ
  • Nhiều ngoại lệ

2. Xử lý lỗi trong PHP (PHP Error handling)


Khi lỗi xảy ra, PHP hiển thị lỗi với một số thông tin để giúp bạn biết lỗi đó là gì và nằm ở chỗ nào.


Dĩ nhiên là thông báo lỗi này không được thân thiện cho lắm.


Nên người dùng sẽ chẳng hiểu là lỗi gì. Họ chỉ biết là họ đang có trải nghiệm tệ.


Vì thế, để tránh làm các "Thượng đế" phật lòng.


PHP cung cấp một số cách để xử lý lỗi. 



Chúng ta sẽ tìm hiểu về 3 phương pháp xử lý lỗi sau đây:



  • Die statements - hàm die là hàm kết hợp giữa echo và hàm thoát lại với nhau. Nó phù hợp khi chúng ta muốn hiển thị một tin nhắn và ngừng lại kịch bản thực thi khi gặp lỗi.
  • Custom error handlers - Đây là phương pháp chúng ta tự thiết lập để xử lý mỗi khi xảy ra lỗi.
  • PHP error reporting - Lỗi tùy thuộc vào thiết lập của trình report lỗi của PHP. Phương pháp này rất hữu ích khi bạn chẳng có ý tưởng gì về nguyên nhân xảy ra lỗi. Các thông tin về lỗi sẽ giúp bạn nhận thức lỗi và tìm kiếm cách xử lý.


3. Ví dụ về cách xử lý lỗi trong chương trình PHP


Trước tiên chúng ta thử đến với một số lỗi cơ bản.


Ví dụ: C
húng ta đang viết một chương trình PHP để thực hiện chia 2 số với nhau.


Đoạn code PHP cho chương trình trên như sau:
            
        

Giả sử bạn đã lưu file simple_error ở trong thư mục phptuts.


Mở đường dẫn này http://localhost/phptuts/simple_error.php trên trình duyệt.


Chúng ta nhận được kết quả như sau:

Ví dụ về lỗi đơn giản trong chương trình PHP

Ví dụ về lỗi đơn giản trong chương trình PHP

 

Như các bạn có thể nhìn thấy ở kết quả trên, chương trình xảy ra lỗi và hiển thị lỗi cho người dùng thấy.


Việc này là không chuyên nghiệp và khiến khách hàng khó chịu.


Chúng ta thử sửa đổi chương trình trên, viết cho nó một cách xử lý trong trường hợp này:
            
        

Lưu code lại và lại chạy tệp http://localhost/phptuts/error_handling.php trên trình duyệt.

Xử lý lỗi theo cách thông thường

Xử lý lỗi theo cách thông thường

 

Chúng ta nhận được thông báo là không thể chia hết cho 0.


Cách thông báo lỗi này thân thiện hơn là cách ở trên phải không?


Bây giờ, hãy thử một ví dụ khác mà chúng ta sử dụng custom error handlers



            
        

Mở đường dẫn của file này http://localhost/phptuts/custom_error_handler.php trên trình duyệt.


Bây giờ bạn thấy lỗi được hiển thị thế nào?

Sử dụng custom error handlers để xử lý lỗi trong chương trình PHP

Sử dụng custom error handlers để xử lý lỗi trong chương trình PHP

 

Như bạn thấy đó, custom error handlers cho phép chúng ta tùy chỉnh tin nhắn thông báo lỗi cho thân thiện và rõ ràng hơn.


Bây giờ hãy thử xem ví dụ về loại report lỗi của PHP xem sao.


Error Reporting Function có cú pháp như sau:
            
        

Ở đây:

  • error_reporting là tên của hàm report lỗi được PHP cung cấp sẵn,
  • $reporting_level là tham số tùy chọn cho phép chúng ta tùy chọn cấp độ report lỗi. Nếu không chỉ định cấp độ report lỗi, PHP sẽ sử dụng báo cáo mặc định được quy định trong file php.ini


 

Các cấp độ report lỗi trong error_reporting


Cấp độ Report lỗi Mô tả
 error_reporting(E_WARNING);  Chỉ có cảnh báo lỗi, không ngừng việc thực thi chương trình
 error_reporting(E_NOTICE);  Hiển thị, thông báo rằng có khả năng chương trình chạy bình thường hoặc lỗi
 error_reporting(E_USER_ERROR);  Màn hình của người dùng sẽ hiện ra lỗi
 error_reporting(E_USER_WARNING);  Màn hình của người dùng tạo tin nhắn cảnh báo
 error_reporting(E_USER_NOTICE);  Màn hình của người dùng hiện ra thông báo lỗi
 error_reporting(E_RECOVERABLE_ERROR);  Hiển thị lỗi không trí mạng và có thể điều chỉnh bằng cách sử dụng  custom error handlers
 error_reporting(E_ALL);  Hiển thị tất cả lỗi và cảnh báo



4. Sự khác nhau của Lỗi (Errors) và Ngoại lệ (Exception)


Ngoại lệ (Exception) là trường hợp được ném và bắt trong khi lỗi thường không thể thu hồi lại.


Exception được xử lý trong hướng đối tượng.


Điều này có nghĩa là khi ngoại lệ được ném ra, một đối tượng ngoại lễ sẽ được tạo và chứa thông tin chi tiết về ngoại lệ đó.


Dưới đây là một số phương thức của đối tượng Exception.



Phương thức getMessage():



Phương thức getMessage() hiển thị tin nhắn ngoại lệ:

            
        

Phương thức getCode():



Phương thức getCode() hiển thị các mã số là đại diện của các loại ngoại lệ.
            
        

Phương thức getFile():



Phương thức getFile() hiển thị tên các tập tin và đường dẫn nơi xảy ra ngoại lệ.
            
        

Phương thức getLine():



Phương thức getLine() hiển thị các dòng xảy ra ngoại lệ:
            
        

Phương thức getTrace():


Phương thức getTrace() hiển thị một loạt các dấu vết trước chương trình xảy ra ngoại lệ:
            
        

Phương thức getPrevious():



Phương thức getPrevious() hiển thị các ngoại lệ trước khi xảy ra trường hợp hiện tại:
            
        

Phương thức getTraceAsString():



Phương thức getTraceAsString() hiển thị một loạt các dấu vết của ngoại lệ như một chuỗi thay vì một mảng:
            
        

Phương thức __toString():



Phương thức __toString() hiển thị toàn bộ ngoại lệ như một chuỗi.
            
        

Cú pháp để ném ra một ngoại lệ

            
        

Ở đây chúng ta có:


  • throw là keyword sử dụng để ném ra một ngoại lệ
  • new Exception(...) tạo ra một đối tượng ngoại lệ và truyền chuỗi "This is an exception example" như một tham số.


Đối với đoạn mã trên thì chúng ta nhận được thông báo như sau:

Sử dụng throw keyword để ném ra một ngoại lệ

Sử dụng throw keyword để ném ra một ngoại lệ

 

Bây giờ chúng ta sẽ xem một ví dụ sử dụng try...catch để xử lý ngoại lệ.


5. Ví dụ sử dụng Try Catch PHP để xử lý ngoại lệ


Ví dụ sử về cách sử dụng try...catch để xử lý ngoại lệ trong Lập trình PHP

Ví dụ sử về cách sử dụng try catch để xử lý ngoại lệ trong Lập trình PHP

 

Cú pháp của try catch như sau:

            
        

Giải thích cú pháp try catch php:


  • try{...} đây là block code thực thi nói rằng, có thể nó sẽ xảy ra ngoại lệ.
  • catch (Exception $e){...} Đây là block code sử dụng để bắt ngoại lệ được ném ra và gán đối tượng ngoại lệ cho biến $e.


Ví dụ bên dưới đây sẽ cố tình ném ra một ngoại lệ và bắt lại nó:

            
        

Mở đường dẫn http://localhost/phptuts/exception_handling.php bạn sẽ nhận được kết quả như sau:

Kết quả của một ví dụ sử dụng try catch php để xử lý ngoại lệ

Kết quả của một ví dụ sử dụng try catch php để xử lý ngoại lệ

 

Nó cũng có thể tạo nhiều ngoại lệ cho một cấu trúc try tùy theo kiểu của ngoại lệ được ném ra.

6. Multiple Exceptions (Nhiều ngoại lệ)


Multiple Exceptions sử dụng nhiều block try...catch để cố gắng bắt các ngoại lệ được ném ra.


Multiple Exception có ích khi:



  • Bạn muốn hiển thị thông điệp tùy thuộc vào ngoại lệ được ném ra
  • Bạn muốn thực hiện một hành động độc đáo tùy thuộc vào ngoại lệ được ném ra.


Sơ đồ dưới đây cho bạn thấy cách hoạt động của Multiple Exceptions


Sơ đồ xử lý của Multiple Exceptions

Sơ đồ xử lý của Multiple Exceptions

Ví dụ về cách sử dụng Multiple Exceptions trong PHP:



Ở ví dụ bên dưới đây chúng ta dự kiến cho 2 trường hợp ngoại lệ xảy ra:


  • Chia cho số 0
  • Chia cho số âm


            
        

Chạy chương trình và chúng ta nhận được kết quả:

Chương trình xử lý khi rơi vào trường hợp chia cho số 0

Chương trình xử lý khi rơi vào trường hợp chia cho số 0


 
Bây giờ chúng ta thử truyền vào một số là -1 thử xem sao.


Chạy chương trình như vừa rồi và bạn nhận được kết quả là gì?

Bạn đã hiểu hơn về Try Catch trong PHP rồi đấy!


Qua bài hướng dẫn xử lý lỗi và ngoại lệ với try catch PHP này bạn đã biết:


  • Lỗi là kết quả bất ngờ của chương trình lập trình
  • Xử lý Lỗi cải thiện hiệu suất của ứng dụng
  • PHP đã xây dựng các hàm để có thể được sử dụng tùy chỉnh báo cáo lỗi theo cấp độ
  • Exceptions (Ngoại lệ) thì giống như lỗi, nhưng chúng ta có thể sử dụng try catch php để bắt ngoại lệ.
  • Hiển thị thông tin về lỗi cho người dùng thấy được là không tốt đối với trải nghiệm cũng như vấn đề bảo mật.


* Trong khóa học Lập trình web với PHP bạn sẽ được hướng dẫn kỹ càng về cách xử lý ngoại lệ thường gặp trong lập trình web.


Chúc bạn học tốt!

Bình luận Facebook
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!