Những lỗi nào được kích hoạt bởi công cụ PHP?
PHP đã hỗ trợ xử lý ngoại lệ từ lâu; . Hỗ trợ ban đầu cho việc xử lý ngoại lệ đã được đưa vào ngôn ngữ từ phiên bản 5, với hai lớp ngoại lệ đơn giản được tích hợp sẵn – Exception và ErrorException, với sự hỗ trợ cho các lớp bổ sung thông qua SPL. Ý tưởng của bài đăng trên blog này là giới thiệu các khả năng xử lý ngoại lệ PHP hiện đại cho người đọc. Show giao diện mớiMặc dù PHP 7 cung cấp cả hai lớp Lỗi và Ngoại lệ, trước tiên hãy kiểm tra giao diện Throwable. Cả hai lớp Lỗi và Ngoại lệ đều triển khai giao diện Có thể ném - đó là cơ sở cho bất kỳ đối tượng nào có thể được ném thông qua câu lệnh ném. Nó chỉ có một ngoại lệ cần lưu ý, nó không thể được triển khai trực tiếp trong các lớp vùng đất của người dùng mà chỉ thông qua việc mở rộng lớp Ngoại lệ. Ngoài ra, nó cung cấp một điểm duy nhất để bắt cả hai loại lỗi trong một câu lệnh
Danh sách các lớp ngoại lệ tích hợp có sẵn kể từ PHP 7. 4
Có thể tìm thấy nhiều lớp ngoại lệ hơn trong Thư viện chuẩn của PHP. Và điều đáng chú ý nhất đến từ phần mở rộng JSON là lớp JsonException Lỗi, cái gì?Trong các phiên bản trước của PHP, các lỗi được xử lý hoàn toàn khác so với các ngoại lệ. Lỗi là thứ được tạo ra trong động cơ và miễn là nó không nghiêm trọng, nó có thể được xử lý bởi một chức năng do người dùng xác định Vấn đề là có một số lỗi nghiêm trọng và không thể xử lý được bằng trình xử lý lỗi do người dùng xác định. Điều này có nghĩa là bạn không thể xử lý các lỗi nghiêm trọng trong PHP một cách duyên dáng. Có một số tác dụng phụ có vấn đề, chẳng hạn như mất ngữ cảnh thời gian chạy, hàm hủy sẽ không được gọi và xử lý chúng rất rắc rối. Trong PHP 7, các lỗi nghiêm trọng giờ đây là ngoại lệ và chúng ta có thể xử lý chúng rất dễ dàng. Lỗi nghiêm trọng dẫn đến một ngoại lệ lỗi bị ném. Bạn cần xử lý các lỗi không nghiêm trọng bằng chức năng xử lý lỗi Đây là một ví dụ bắt lỗi nghiêm trọng trong PHP 7. 1. Lưu ý cách lỗi không nghiêm trọng không bị bắt
Tập lệnh này sẽ xuất ra thông báo lỗi khi cố gắng truy cập một biến không hợp lệ. Cố gắng gọi một hàm không tồn tại sẽ dẫn đến lỗi nghiêm trọng trong các phiên bản PHP trước, nhưng trong PHP 7. 1 bạn có thể bắt nó. Đây là đầu ra cho kịch bản
hằng số lỗi PHP có rất nhiều hằng số được sử dụng liên quan đến lỗi. Các hằng này được sử dụng khi cấu hình PHP để ẩn hoặc hiển thị lỗi của một số lớp nhất định Dưới đây là một số mã lỗi thường thấy nhất
Để biết danh sách đầy đủ các hằng số, vui lòng tham khảo hướng dẫn sử dụng PHP Chức năng xử lý lỗiHàm set_error_handler() được sử dụng để cho PHP biết cách xử lý các lỗi công cụ tiêu chuẩn không phải là phiên bản của lớp ngoại lệ Lỗi. Bạn không thể sử dụng chức năng xử lý lỗi cho các lỗi nghiêm trọng. Các ngoại lệ lỗi phải được xử lý bằng câu lệnh try/catch. set_error_handler() chấp nhận một tham số có thể gọi được. Callables trong PHP có thể được chỉ định theo hai cách. bằng một chuỗi biểu thị tên của một hàm hoặc bằng cách truyền một mảng chứa một đối tượng và tên của một phương thức (theo thứ tự đó). Bạn có thể chỉ định các phương thức được bảo vệ và riêng tư là có thể gọi được trong một đối tượng. Bạn cũng có thể chuyển null để yêu cầu PHP hoàn nguyên về việc sử dụng cơ chế xử lý lỗi tiêu chuẩn. Nếu trình xử lý lỗi của bạn không kết thúc chương trình và quay lại, thì tập lệnh của bạn sẽ tiếp tục thực thi ở dòng sau dòng xảy ra lỗi PHP chuyển tham số cho hàm xử lý lỗi của bạn. Bạn có thể tùy chọn khai báo những thứ này trong chữ ký hàm nếu bạn muốn sử dụng chúng trong hàm của mình Đây là một ví dụ về tùy chỉnh
Nếu bạn chạy mã này trong bảng điều khiển PHP php -a, bạn sẽ nhận được kết quả tương tự
Các thư viện PHP nổi bật nhất sử dụng rộng rãi set_error_handler() của PHP và có thể biểu diễn tốt các trường hợp ngoại lệ và lỗi là các thành phần Gỡ lỗi và ErrorHandler của Whoops hoặc Symony. đề nghị của tôi là sử dụng một trong những. Nếu không, bạn luôn có thể lấy cảm hứng từ mã của họ. Mặc dù thành phần Gỡ lỗi được sử dụng rộng rãi trong hệ sinh thái Symfony, nhưng Whoops vẫn là thư viện được lựa chọn cho khung công tác Laravel. Để biết cách sử dụng chi tiết và nâng cao, vui lòng tham khảo hướng dẫn PHP về trình xử lý lỗi Hiển thị hoặc chặn thông báo lỗi không nghiêm trọngKhi ứng dụng của bạn được sản xuất, bạn muốn ẩn tất cả các thông báo lỗi hệ thống trong khi sản xuất và mã của bạn phải chạy mà không tạo cảnh báo hoặc thông báo. Nếu bạn sắp hiển thị thông báo lỗi, hãy đảm bảo rằng đó là thông báo bạn đã tạo và thông báo đó không bao gồm thông tin có thể giúp kẻ tấn công đột nhập vào hệ thống của bạn Trong môi trường phát triển của mình, bạn muốn tất cả các lỗi được hiển thị để bạn có thể khắc phục tất cả các vấn đề liên quan đến chúng, nhưng trong khi sản xuất, bạn muốn chặn mọi thông báo hệ thống được gửi tới người dùng Để thực hiện điều này, bạn cần định cấu hình PHP bằng cách sử dụng các cài đặt sau trong tệp php của mình. tập tin ini
Cách tốt nhất là xử lý các lỗi trong ứng dụng của bạn một cách duyên dáng. Trong quá trình sản xuất, bạn nên ghi lại các lỗi chưa được xử lý thay vì cho phép chúng hiển thị cho người dùng. Hàm error_log() có thể được sử dụng để gửi một thông báo đến một trong các quy trình xử lý lỗi đã xác định. Bạn cũng có thể sử dụng hàm error_log() để gửi email, nhưng cá nhân tôi thì thà sử dụng một giải pháp tốt để ghi lỗi và nhận thông báo khi xảy ra lỗi như Sentry hoặc Rollbar Có một thứ gọi là Toán tử kiểm soát lỗi – ký hiệu (@) – về bản chất có thể bỏ qua và loại bỏ lỗi. Cách sử dụng rất dễ dàng – chỉ cần thêm vào trước bất kỳ biểu thức PHP nào có ký hiệu và lỗi được tạo sẽ bị bỏ qua. Mặc dù sử dụng toán tử này có vẻ thú vị nhưng tôi khuyên bạn không nên làm điều đó. Tôi thích gọi nó là di tích sống từ quá khứ Thông tin thêm về tất cả chức năng liên quan đến lỗi PHP có thể được tìm thấy trong sách hướng dẫn ngoại lệNgoại lệ là một phần cốt lõi của lập trình hướng đối tượng và lần đầu tiên được giới thiệu trong PHP 5. 0. Ngoại lệ là trạng thái chương trình yêu cầu xử lý đặc biệt vì nó không chạy theo cách mong đợi. Bạn có thể sử dụng một ngoại lệ để thay đổi luồng chương trình của mình, chẳng hạn như ngừng thực hiện điều gì đó nếu một số điều kiện tiên quyết không được đáp ứng Một ngoại lệ sẽ xuất hiện trong ngăn xếp cuộc gọi nếu bạn không nắm bắt được nó. Hãy kiểm tra một ví dụ đơn giản
PHP bao gồm một số loại ngoại lệ tiêu chuẩn và thư viện PHP tiêu chuẩn (SPL) bao gồm một số loại khác. Mặc dù bạn không phải sử dụng các ngoại lệ này, nhưng làm như vậy có nghĩa là bạn có thể sử dụng báo cáo và phát hiện lỗi chi tiết hơn. Các lớp Ngoại lệ và Lỗi đều triển khai giao diện Có thể ném và, giống như bất kỳ lớp nào khác, có thể được mở rộng. Điều này cho phép bạn tạo hệ thống phân cấp lỗi linh hoạt và điều chỉnh cách xử lý ngoại lệ của mình. Chỉ một lớp triển khai lớp Có thể ném mới có thể được sử dụng với từ khóa ném. Nói cách khác, bạn không thể khai báo lớp cơ sở của riêng mình và sau đó ném nó như một ngoại lệ Mã mạnh có thể gặp lỗi và đối phó với nó. Xử lý các ngoại lệ theo cách hợp lý sẽ cải thiện tính bảo mật của ứng dụng của bạn và giúp ghi nhật ký và gỡ lỗi dễ dàng hơn. Quản lý lỗi trong ứng dụng của bạn cũng sẽ cho phép bạn cung cấp cho người dùng trải nghiệm tốt hơn. Trong phần này, chúng tôi đề cập đến cách bẫy và xử lý các lỗi xảy ra trong mã của bạn Bắt ngoại lệHãy xem ví dụ đơn giản này
Như bạn có thể thấy, có hai mệnh đề bắt. Các ngoại lệ sẽ được so khớp với các mệnh đề từ trên xuống dưới cho đến khi loại ngoại lệ khớp với mệnh đề bắt. Hàm throwMyCustomException() rất đơn giản này sẽ ném MyCustomException và chúng tôi hy vọng nó sẽ được bắt trong khối đầu tiên. Bất kỳ trường hợp ngoại lệ nào khác sẽ xảy ra sẽ bị bắt bởi khối thứ hai. Ở đây chúng ta đang gọi phương thức getMessage() từ lớp Exception cơ sở. Bạn có thể tìm thêm thông tin về phương thức bổ sung trong tài liệu PHP ngoại lệ Bạn cũng có thể chỉ định nhiều ngoại lệ bằng cách tách chúng bằng dấu gạch ngang (. ) nhân vật Hãy xem một ví dụ khác
Khối bắt rất đơn giản này sẽ bắt các ngoại lệ kiểu MyCustomException và MyAnotherCustomException Kịch bản đánh bắt nâng cao hơn một chút ________số 8_______Đây có phải là câu trả lời cuối cùng của bạn?Trong PHP5. 5 trở lên, khối cuối cùng cũng có thể được chỉ định sau hoặc thay vì khối bắt. Mã trong khối cuối cùng sẽ luôn được thực thi sau khối thử và bắt, bất kể ngoại lệ đã được ném hay chưa và trước khi tiếp tục thực thi bình thường. Một cách sử dụng chung cho khối cuối cùng là đóng kết nối cơ sở dữ liệu, nhưng cuối cùng có thể được sử dụng bất cứ nơi nào bạn muốn mã luôn được thực thi
Đây là một ví dụ điển hình phù hợp với cách hoạt động của các câu lệnh catch/cuối cùng của PHP 0Hàm xử lý ngoại lệBất kỳ ngoại lệ nào không bị bắt đều dẫn đến lỗi nghiêm trọng. Nếu bạn muốn phản hồi một cách duyên dáng với các ngoại lệ không bị bắt trong các khối bắt, bạn sẽ cần đặt một hàm làm trình xử lý ngoại lệ mặc định Để làm như vậy, bạn sử dụng hàm set_Exception_handler(), hàm này chấp nhận tham số có thể gọi được. Tập lệnh của bạn sẽ chấm dứt sau khi lệnh gọi được thực thi Hàm restore_Exception_handler() sẽ hoàn nguyên trình xử lý ngoại lệ về giá trị trước đó 1Ở đây, hàm exception_handler đơn giản sẽ được thực thi sau khi chặn cuối cùng khi không có loại ngoại lệ nào phù hợp. Câu lệnh in cuối cùng sẽ không bao giờ được thực thi Để biết thêm thông tin, hãy tham khảo tài liệu PHP “T_PAAMAYIM_NEKUDOTAYIM” cũ tốtĐây có lẽ là thông báo lỗi PHP nổi tiếng nhất từ trước đến nay. Đã có nhiều tranh cãi về nó trong những năm gần đây. Bạn có thể đọc thêm trong một bài đăng blog xuất sắc từ Phil Sturgeon. Hôm nay tôi có thể tự hào nói rằng nếu bạn chạy mã này với PHP 7 thì sẽ không xảy ra T_PAAMAYIM_NEKUDOTAYIM 2Phần kết luậnKể từ lần đầu tiên giới thiệu xử lý ngoại lệ cho PHP, nhiều năm đã trôi qua cho đến khi chúng tôi kết thúc với việc xử lý ngoại lệ hoàn thiện và vững chắc hơn nhiều mà Java đã có, khá thẳng thắn từ lâu. Việc xử lý lỗi trong PHP 7 đã nhận được nhiều sự chú ý khiến nó trở nên tốt hơn, mở ra không gian cho những cải tiến trong tương lai nếu chúng ta thực sự cần từ quan điểm ngày nay. Loại lỗi nào có thể xảy ra trong PHP?Bốn loại lỗi PHP là. . Lỗi cảnh báo thông báo lỗi Lỗi phân tích cú pháp Lỗi nghiêm trọng Lỗi PHP ở đâu?Vị trí của tệp nhật ký lỗi có thể được đặt thủ công trong php. tập tin ini. Trên máy chủ Windows, trong IIS, nó có thể giống như "'error_log = C. \log_files\php_errors. log '" trong Linux, nó có thể là giá trị của "'/var/log/php_errors.
Mức độ lỗi nào để báo lỗi trong công cụ khởi động PHP?18. Mức độ lỗi nào để báo lỗi trong công cụ khởi động PHP? . E_CORE_ERROR là mức lỗi để báo lỗi trong quá trình khởi động PHP engine
Có bao nhiêu cấp độ lỗi trong PHP?Có bao nhiêu cấp độ lỗi trong PHP? . Các lỗi này đại diện cho danh mục và đôi khi là mức độ nghiêm trọng của lỗi trong PHP. 16 error levels in PHP 5. These errors represent the category and sometimes severity of an error in PHP. |