Xử lý ngoại lệ và lỗi (Error & Exception Handling) - AGOLA Xử lý ngoại lệ và lỗi (Error & Exception Handling) - AGOLA

Xử lý lỗi là tiến trình phát hiện lỗi được tạo khi chạy code của bạn và sau đó thực hiện các hành động thích hợp. Nếu bạn xử lý lỗi không chính xác, thì có thể dẫn tới nhiều kết quả không mong đợi. Trong PHP, việc xử lý một lỗi khá đơn giản.

Sử dụng hàm die() trong PHP

Trong khi lập trình PHP, bạn nên kiểm tra tất cả điều kiện lỗi có thể có trước khi tiếp tục và thực hiện các hành động thích hợp khi cần thiết.

Bạn thử ví dụ sau mà không có file /tmp/test.xt và với file này.

<?php // Phần kiểm tra điều kiện lỗi.
 if(!file_exists("/tmp/test.txt")) { die("Không tìm thấy file!"); }else { $file = fopen("/tmp/test.txt","r"); print "Mở file thành công"; } // Phần code chính của chương trình. ?>

Theo cách này, bạn có thể viết một code hiệu quả. Sử dụng hàm die(), bạn có thể dừng chương trình bất cứ khi nào nó xảy ra lỗi và hiển thị thông báo thân thiện và ý nghĩa hơn tới người dùng.

Tự định nghĩa hàm để xử lý lỗi trong PHP

Bạn có thể tự viết hàm riêng để xử lý các lỗi phát sinh trong chương trình của mình. PHP cung cấp cho bạn một framework để định nghĩa hàm xử lý lỗi.

Hàm này phải có khả năng để thao thác ít nhất hai tham số (error level và error message), nhưng có thể tới 5 tham số (tùy ý: file, line-number, và error context):

Cú pháp

error_function(error_level,error_message, error_file,error_line,error_context);

Bảng dưới là chi tiết về các tham số trên:

Tham số Mô tả
error_level Bắt buộc – Xác định cấp độ lỗi cho lỗi tự định nghĩa (user-defined). Phải là một giá trị số.
error_message Bắt buộc – Xác định thông báo lỗi cho lỗi tự định nghĩa.
error_file Tùy chọn – Xác định tên file xảy ra lỗi đó.
error_line Tùy chọn – Xác định số dòng xảy ra lỗi đó.
error_context Tùy chọn – Xác định một mảng chứa mọi biến và giá trị của chúng, sử dụng khi lỗi xảy ra.

Cấp độ lỗi có thể có trong PHP

Những cấp độ lỗi này là các kiểu lỗi khác nhau. Những giá trị này có thể được sử dụng kết hợp bởi sử dụng toán tử.

Giá trị Hằng số Mô tả
1 E_ERROR Lỗi tại thời điểm chạy nghiêm trọng (Fatal run-time error). Các lỗi nghiêm trọng và việc thực thi script bị dừng lại.
2 E_WARNING Lỗi tại thời điểm chạy nhưng không nghiêm trọng (Non-fatal run-time error). Các lỗi không nghiêm trọng và việc thực thi script không bị dừng lại.
4 E_PARSE Lỗi phân tích cú pháp trong khi biên dịch (Compile-time parse error). Các lỗi về phần tích cú pháp này nên chỉ được tạo bởi trình phân tích cú pháp – parser.
8 E_NOTICE Thông báo trong thời gian chạy (Run-time notice). Script tìm thấy cái gì đó mà có thể là một lỗi, nhưng cũng có thể xảy ra khi đang chạy một script một cách bình thường.
16 E_CORE_ERROR Các lỗi nghiêm trọng xảy ra trong quá trình khởi chạy ban đầu của PHP.
32 E_CORE_WARNING Các lỗi không nghiêm trọng, xảy ra trong quá trình khởi chạy ban đầu của PHP.
256 E_USER_ERROR Lỗi nghiêm trọng do người dùng tạo ra. Nó giống như lỗi E_ERROR được thiết lập bởi lập trình viên bằng cách sử dụng hàm trigger_error() trong PHP.
512 E_USER_WARNING Lỗi không nghiêm trọng do người dùng tạo ra. Nó giống như lỗi E_WARNING được thiết lập bởi lập trình viên nhờ sử dụng hàm trigger_error() trong PHP.
1024 E_USER_NOTICE Thông báo được tạo bởi người dùng. Nó giống như một E_NOTICE được thiết lập bởi lập trình viên với hàm trigger_error() trong PHP.
2048 E_STRICT Thông báo trong khi chạy. Cho phép HPH đề xuất những thay đổi đối với code, nhằm đảm bảo khả năng tương tác và tương thích tốt nhất cho code.
4096 E_RECOVERABLE_ERROR Lỗi nghiêm trọng có thể bắt. Giống một E_ERROR nhưng có thể được bắt bởi trình xử lý lỗi tự định nghĩa (tham khảo set_error_handler()).
8191 E_ALL Tất cả lỗi và cảnh báo, ngoại trừ E_STRICT (E_STRICT sẽ là một phần của E_ALL kể từ phiên bản PHP 6.0).

Tất cả cấp độ lỗi trên có thể được thiết lập bằng cách sử dụng thư viện hàm có sẵn trong PHP sau, với level có thể là bất kỳ giá trị nào được định nghĩa trong bảng trên.

int error_reporting ( [int $level] )

Dưới đây là cách bạn có thể tạo một hàm xử lý lỗi trong PHP:

<?php
 function handleError($errno, $errstr,$error_file,$error_line) {
 echo "<b>Xảy ra lỗi:</b> [$errno] $errstr - $error_file:$error_line";
 echo "<br />";
 echo "Dừng PHP Script";
 die();
 }
?>

Khi trình xử lý lỗi đã được định nghĩa, bạn sẽ dùng hàm set_error_handler có sẵn trong PHP để thiết lập nó. Bây giờ kiểm tra lại ví dụ trên bằng việc gọi một hàm mà không tồn tại.

<?php error_reporting( E_ERROR ); function handleError($errno, $errstr,$error_file,$error_line) { echo "<b>Xảy ra lỗi:</b> [$errno] $errstr - $error_file:$error_line"; echo "<br />"; echo "Dừng PHP Script"; die(); } //thiết lập trình xử lý lỗi set_error_handler("handleError"); //code chạy khi lỗi xảy ra (trigger error) myFunction(); ?>

Xử lý ngoại lệ (Exception Handling) trong PHP

PHP 5 có một mô hình ngoại lệ (Exception Model) tương tự như trong các ngôn ngữ lập trình khác. Các ngoại lệ rất quan trọng và cung cấp khả năng kiểm soát quá trình xử lý lỗi tốt hơn

Dưới đây giải thích một số từ khóa liên quan tới exception trong PHP:

  • Try (thử): Một hàm sử dụng một exception phải nằm trong khối try. Nếu exception không kích hoạt, code sẽ tiếp tục như bình thường. Tuy nhiên, nếu exception kích hoạt, một exception được “throw”.
  • Throw (ném): Đây là cách bạn kích hoạt một exception. Mỗi “throw” phải có ít nhất một “catch”.
  • Catch (bắt): Mỗi khối “catch” thu nhận một exception và tạo một đối tượng chứa thông tin exception đó.

Khi một exception được “throw”, code theo sau lệnh đó sẽ không được thực thi, và PHP sẽ cố gắng tìm kiếm khối catch so khớp đầu tiên. Nếu một exception không được “catch”, một Fatal Error (lỗi nghiêm trọng) trong PHP sẽ được thông báo với phần mở đầu là “Uncaught Exception…”

  • Một exception có thể được “throw”, và “catch” bên trong PHP. Code có thể được bao quanh trong một khối try.
  • Mỗi khối try phải có ít nhất một khối catch tương ứng. Nhiều khối catch có thể được sử dụng để bắt các lớp exception khác nhau.
  • Các exception có thể được “throw” (hoặc “re-throw” – ném lại) bên trong một khối catch.

Ví dụ

Dưới đây là một đoạn code, bạn sao chép và dán code này vào trong một file và kiểm tra kết quả:

<?php try { $error = 'Luôn quăng ra lỗi này'; throw new Exception($error); // Phần code theo sau một ngoại lệ sẽ không được thực thi. echo 'Phần code không bao giờ được thực thi'; }catch (Exception $e) { echo 'Bắt một exception: ', $e->getMessage(), "n"; } // Tiếp tục thực thi echo 'Xin chào!'; ?>

Trong ví dụ trên, hàm $e->getMessage được sử dụng để lấy thông báo lỗi. Dưới đây là một số hàm có thể được sử dụng từ lớp Exception trong PHP.

  • getMessage() − thông báo của exception
  • getCode() − code của exception
  • getFile() − tên source file
  • getLine() − source line
  • getTrace() − n mảng của backtrace()
  • getTraceAsString() − chuỗi được định dạng của trace

Tạo Custom Exception Handler trong PHP

Bạn có thể tự định nghĩa Exception Handler cho mình. Hãy sử dụng các hàm sau để thiết lập một hàm xử lý ngoại lệ tự định nghĩa.

string set_exception_handler ( callback $exception_handler )

Ở đây, exception_handler là tên hàm được gọi khi một ngoại lệ không được catch (uncaught exception) xuất hiện. Hàm này phải được định nghĩa trước khi gọi hàm set_exception_handler().

Ví dụ

<?php
 function exception_handler($exception) {
 echo "Exception không catch được: " , $exception->getMessage(), "n";
 }
 set_exception_handler('exception_handler');
 throw new Exception('Xuất hiện Exception không catch được');
 
 echo "Phần code không được thực thin";
?>




Các lý do cần đọc trước khi quyết định liên hệ tôi 

  1. Tham gia group Mua bán Google Ads và Google Shopping :

    https://www.facebook.com/groups/314513929300715

  2. Tham gia group mua bán cho thuê tài khoản BM Agency :

    https://www.facebook.com/groups/1204318359703229

  3. AGOLA chỉ cung cấp dịch vụ không có dịch vụ tư vấn hiểu tới đâu bán tới đó !
  4. AGOLA ngừng cung cấp các gói dịch cho bọn có Slogan " Tuần đổi xe tháng mua nhà " hoặc liên quan !
  5. Các dịch vụ liên quan đến hướng dẫn : diễn ra từ 5-30 phút thông qua teamview hoặc ultral thời gian càng ngắn giá tiền càng cao nên các bạn đọc kỹ trước khi sử dụng
  6. Các sản phẩm dịch vụ không có thương thảo giá và cũng không có hỏi thêm
  7. Không làm việc với mấy thằng giao lưu với lũ suốt ngày dùng VPS remote này remote kia sock này sock kia đổi ngôn ngữ này đổi ngôn ngữ kia add page này sang page kia đổi đá cá kiểu con đà điều ... đây là một lũ ngu thời hiện đại khi bạn muốn vượt rào vòng đầu bạn đã gian lận thì vượt vào đít kèm với đó khả năng dính liên đơi nghi ngờ hành vi bất thường là rất cao nó như kiểu hành vi của bạn có tần xuất giống như hành vi của bọn gian lận khá nhiều nó cho bạn vào động cơ gian lận có nguy cơ nó sẽ pem luôn nhé ... và ti tỷ lý do khác nhé nếu bọn mày mà làm theo tụi nó lên cam được tao cho 20 triệu tiền cafe cà pháo
  8. Không bán vĩnh viễn mọi dịch vụ mua nhầm đòi đổi sang gói dịch vụ khác
  9. Thông tin bảo hành gần như không có nhưng cũng có một số dịch vụ có bảo hành đề nghị đọc kỹ trước khi quyết định mua
  10. Quyết định mua hàng là đồng ý các điều khoản mua bán và điều khoản không được lấy lại tiền và không bồi hoàn
  11. Mua hàng thì xin đọc kỹ điều khoản ở từng mô tả trước khi quyết định nhấc máy liên hệ ở thông tin của từng gói dịch vụ
  12. Mọi giao dịch đều được phải bắt buộc chụp màn hình chuyển khoản gửi vào Zalo
  13. Các đối tượng cố ý chuyển tiền gói này để trục lợi sử dụng gói khác đều được coi là hình vi lừa đảo ! Cố ý ghi nội dung hiểu lầm về chuyển tiền để đôi co đòi sử dụng gói dịch vụ khác cũng vậy !
  14. Tôi là dân khối A nên việc viết sai lỗi chính tả thì kệ mẹ tôi thích thì mua không thích thì đừng soi đi ra chỗ khác do tôi không có soát lại chính tả nên các bạn đọc thay vì thắc mắc thì thông cảm giùm tôi ! miễn sao tôi truyền tải thông tin bạn đọc bạn thấy hiểu được bạn sử dụng không được bạn tìm bên khác
  15. Tôi không làm việc với bọn cử nhân viên là các công ty Agency , truyền thông gọi hỏi dò hỏi luyên thuyên ! Nếu cố tình tôi sẽ dùng CRM Agency cấm lock chạy Ads vĩnh viễn khi nhìn thấy đuôi theo rõi của doanh nghiệp đó mà tôi đã gán.
  16. Tôi không làm việc với bọn nào thì tôi chạy tiền tỷ tôi tiêu tiền tỷ nhưng chạy demo trước nếu ngon thì vít lớn nhưng sau 3 ngày thuê thấy đéo thấy như cam kết về ngân sách
  17. Tôi không hợp tác ăn chia hay kiểu Win Win đôi bên có lợi
  18. Tất cả những câu hỏi khi gọi điện khiến tôi nghĩ rằng bạn chưa đọc kỹ thông tin trên website sẽ được tôi từ chối vô điều kiện
  19. Không làm việc các công ty có các nhân vật nổi tiếng trên các đài báo truyền hình bởi vậy bớt quảng cáo
  20. Các đối tượng cố tình lên mạng tìm kiểm thông tin tôi và không có trao đổi được tôi dùng Zalo : O9O9.456.866 gửi STK thông tin thanh toán của tôi qua zalo đó mà vẫn chuyển tiền vào tài khoản của tôi được coi là hình vi lừa đảo cố tình trọc phá và lợi dụng sử dụng lừa đảo để mong muốn sử dụng dịch vụ của tôi nhưng vì cấm nên phải làm vậy
  21. Kiến thức của đại đa số dân trên mạng không sai mà chỉ đúng với bọn gà mờ mà thôi kiểu như bạn học lớp 1 cô giáo nói 1 không trừ được cho 2 lên cấp 2 cô giáo nói 1 trừ được cho 2 ! Lúc đó cô giáo cấp 1 hay thầy giáo cấp 2 không nói ai đúng ai sai được mà tại thời điểm đó bạn thấy nó đúng còn khi đi sâu vào nó đéo đúng 😀 ! Cũng như việc tôi bán dịch vụ cho dân trong nghề việc tôi có bắt mấy thằng cấp 1 nuốt kiến thức chuyên sâu của cấp 2 là không được bởi vậy dân nào hiểu sẽ liên hệ mua chứ đừng kiểu lơ mở hỏi cho vui cửa vui nhà
  22. Không làm việc với bọn hở miệng ra là em từng có BM2500 với BM1000
  23. Không lamg việc với bọn hở mồm ra là fake mà đến cái via kiểm tra như thế nào là 1 cái via Việt hay via us... cũng đéo biết kiểm tra thế mà cứ đi nghe mấy thằng trên mạng Fake Ip , Fake đổi ngôn ngữ này ngôn ngữ kia ... tùm lum tà la login đổi via các kiểu con đa điểu rồi nghe thì vui tai mà làm cũng được không đéo có biết lý do chỉ có lý do vớ vẩn - Không tin tao đố bọn mày hỏi thử nó 1 câu via Việt là như thế nào đố thằng đó biết đó xàm xí - hay via việt là thông tin Việt Nam hahaha !
  24. Không làm việc với bọn nào thì đổi mạng 4g kết nối này kết nối kia lên cam có con cặc ấy mấy cái công nghệ cổ lỗ sĩ này bọn code tool click quảng cáo nó sài gần 10 năm nay rồi lòe dân gà hoài dần dần ko hiệu quả bọn nó ko dùng rồi lũ đó biến mất khỏi thị trường bán tài khoản
  25. Quyết tâm cấm log mọi thằng liên quan tới BM2500 vĩnh viễn hạn chế tài khoản quảng cáo liên đới từ 6 tới 2 năm kể cả cho kháng XMDT theo tút trên mạng
  26. Tiếp tục sắp tới sẽ thanh lọc toàn bộ Invoice
  27. Bọn mày nghĩ xem mẹ chúng nó giỏi vậy nhận hàng về mà chạy quảng cáo đi giàu hơn ko sao phải đi kiếm tiền dạy học ba láp ba xàm đó xem thấy quảng cáo của tụi đó trước đây chạy quảng cáo tràn lan quảng bá khóa học như đúng rồi giờ chạy đi ba láp ba xàm

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 *

Call Now Button
X