Khi tôi bắt đầu làm quen với các ngoại lệ trong mã hóa hàng ngày của mình (tôi phải mất một thời gian, thành thật mà nói. ) Tôi nhận thấy rằng việc tôi đưa ra một ngoại lệ đôi khi có thể được "kết nối" trực tiếp với phản hồi mà tôi đưa ra cho yêu cầu Show
Giả sử, một tài nguyên được yêu cầu với một mã định danh, nhưng nó không tồn tại. Điều đó sẽ bằng một <?php namespace Dafis\DataApi\Exception; use Neos\Flow\Exception; final class InvalidOrganizationGivenException extends Exception { protected $statusCode = 403; protected $referenceCode = 1608288610; }5 Và với các ngoại lệ trong Flow Framework, bạn có thể làm điều đó. Và mặc dù bạn có thể không nghĩ gì về nó, nhưng nó đã được sử dụng. Trong <?php namespace Dafis\DataApi\Exception; use Neos\Flow\Exception; final class InvalidOrganizationGivenException extends Exception { protected $statusCode = 403; protected $referenceCode = 1608288610; }6 được sử dụng khi định tuyến và bộ điều khiển không khớp, thuộc tính <?php namespace Dafis\DataApi\Exception; use Neos\Flow\Exception; final class InvalidOrganizationGivenException extends Exception { protected $statusCode = 403; protected $referenceCode = 1608288610; }7 được đặt thành 404
Điều này tạo bọt cho trình xử lý ngoại lệ và chuyển <?php namespace Dafis\DataApi\Exception; use Neos\Flow\Exception; final class InvalidOrganizationGivenException extends Exception { protected $statusCode = 403; protected $referenceCode = 1608288610; }7 tới Phản hồi HTTP Và bạn có thể làm như vậyHôm nay tôi đã làm việc với các kiểm tra liên quan đến bảo mật theo yêu cầu. Nếu tham số đã cho không phù hợp với người dùng đã xác thực (cố gắng truy cập vào thứ gì đó mà bạn không nên), tôi muốn trả lại một <?php namespace Dafis\DataApi\Exception; use Neos\Flow\Exception; final class InvalidOrganizationGivenException extends Exception { protected $statusCode = 403; protected $referenceCode = 1608288610; }9 Vì vậy, tôi đã làm, bằng cách ném một ngoại lệ như thế này <?php namespace Dafis\DataApi\Exception; use Neos\Flow\Exception; final class InvalidOrganizationGivenException extends Exception { protected $statusCode = 403; protected $referenceCode = 1608288610; } Thông báo quan trọng. Bạn cần mở rộng lớp 0 để điều này có hiệu lựcVà hiện tại, phản hồi đó đang nổi lên (trong trường hợp của tôi là điểm cuối API) trả về mã trạng thái cho giao diện người dùng của tôi và điều đó có thể được xử lý độc đáo Lợi ích lớn nhất là tôi không cần thêm điều kiện nào xung quanh mã của mình để trả về thông báo lỗi 🤩 Ngoại lệ là sự gián đoạn luồng thực thi chương trình bình thường do kết quả không mong muốn từ chương trình. Các ngoại lệ về cơ bản giống như các lỗi lập trình điển hình. Tuy nhiên, không giống như các lỗi tiêu chuẩn, các ngoại lệ có thể được xử lý bởi chính chương trình Mục lục
điều kiện tiên quyếtMột người đọc nên có kiến thức trước về những điều sau đây để làm theo cùng với bài viết này
Giới thiệu về xử lý ngoại lệXử lý ngoại lệ là các lỗi xử lý xảy ra trong thời gian chạy chương trình và thường giống nhau trong tất cả các chương trình. Khi xảy ra lỗi, xử lý ngoại lệ sẽ thay đổi luồng chương trình. Những lỗi này thường được gọi là ngoại lệ Các từ khóa sau được sử dụng để xử lý các ngoại lệ trong PHP thửĐây là khối nơi mã có khả năng có ngoại lệ được nhập. Nếu mã có ngoại lệ trong thời gian chạy, ngoại lệ đó sẽ bị bắt và sửa trong khối bắt. 1 thường được sử dụng với khối 2 hoặc khối 3. Khối try thường được sử dụng cùng với một hoặc nhiều khối catch trong một chương trìnhchụp lấyBất cứ khi nào một ngoại lệ được ném vào 1 của chương trình PHP, một mã trong 0 sẽ được thực thi để cố gắng xử lý ngoại lệ đó. 0 không thể tồn tại một mình. Thay vào đó, nó hoạt động cùng với 1némTừ khóa ném được sử dụng để ném ngoại lệ trong chương trình PHP. Nó cũng cho phép liệt kê tất cả các ngoại lệ được đưa ra bởi một chức năng cụ thể và không thể xử lý. Không thể sử dụng từ khóa ném nếu không có 0cuối cùng 4 được sử dụng trong hoạt động dọn dẹp PHP. Khối này chứa lõi của mã và chịu trách nhiệm thực thi mã. Khối này có thể được sử dụng như một 0 và luôn được thực thi ngay cả khi một ngoại lệ không được xử lýDưới đây là biểu diễn sơ đồ về luồng sự kiện trong quá trình xử lý ngoại lệ Sự cố khi một ngoại lệ được kích hoạtBất cứ khi nào một ngoại lệ được kích hoạt trong thời gian chạy chương trình, các sự kiện sau sẽ xảy ra
Tại sao sử dụng xử lý ngoại lệ thay vì xử lý lỗi?Xử lý ngoại lệ có những ưu điểm sau so với xử lý lỗi
Các ngoại lệ có thể được xử lý theo nhiều cách khác nhau và được thảo luận bên dưới Các phương pháp xử lý ngoại lệ1. Sử dụng các ngoại lệ cơ bản để xử lý lỗiĐiều này liên quan đến việc sử dụng các khối 6 để xử lý các ngoại lệ mỗi khi một ngoại lệ được ném vào mã chương trình. Đôi khi một ngoại lệ được ném ra nhưng không bị bắt; Dưới đây là một ví dụ về mã không bắt được ngoại lệ và đầu ra là lỗi ________số 8 Đoạn mã trên đưa ra thông báo lỗi vì ngoại lệ đã được đưa ra, nhưng khối catch chưa được đưa vào mã. Do đó, khối thử không thể tồn tại nếu không có khối bắt Để tránh lỗi được minh họa ở trên, nên sử dụng các khối chính xác trong mã như hình bên dưới
Đoạn mã trên đưa ra một ngoại lệ và bắt nó bằng cách sử dụng các khối thử và bắt thành công 2. Tạo một lớp ngoại lệ tùy chỉnh đặc biệtĐiều này liên quan đến việc tạo một lớp tùy chỉnh với các chức năng có thể được gọi trong trường hợp xảy ra ngoại lệ. Lớp ngoại lệ tùy chỉnh này dự kiến sẽ mượn các thuộc tính từ lớp ngoại lệ của PHP cùng với các chức năng được thêm vào khác Dưới đây là một minh họa mã về cách một lớp ngoại lệ có thể được tạo ra <?php namespace Dafis\DataApi\Exception; use Neos\Flow\Exception; final class InvalidOrganizationGivenException extends Exception { protected $statusCode = 403; protected $referenceCode = 1608288610; }0 3. Sử dụng nhiều trường hợp ngoại lệĐiều này liên quan đến việc sử dụng nhiều lớp xử lý ngoại lệ để kiểm tra nhiều trường hợp ngoại lệ Dưới đây là một minh họa mã của nhiều trường hợp ngoại lệ được sử dụng <?php namespace Dafis\DataApi\Exception; use Neos\Flow\Exception; final class InvalidOrganizationGivenException extends Exception { protected $statusCode = 403; protected $referenceCode = 1608288610; }1 Đoạn mã trên được sử dụng để kiểm tra hai điều kiện và các ngoại lệ sẽ được đưa ra nếu bất kỳ điều kiện nào không được đáp ứng 4. Ném lại ngoại lệĐiều này xảy ra khi có nhu cầu xử lý một ngoại lệ theo một cách khác với cách xử lý ngoại lệ tiêu chuẩn. Do đó, một ngoại lệ được ném lần thứ hai trong khối bắt Dưới đây là một minh họa mã của việc ném lại ngoại lệ <?php namespace Dafis\DataApi\Exception; use Neos\Flow\Exception; final class InvalidOrganizationGivenException extends Exception { protected $statusCode = 403; protected $referenceCode = 1608288610; }2 5. Sử dụng một tập hợp các hàm xử lý ngoại lệ cấp cao nhấtĐây là một cách xử lý các ngoại lệ chưa được phát hiện. Hàm do người dùng định nghĩa 7 được sử dụng để đạt được điều này, như thể hiện trong hình minh họa mã bên dưới<?php namespace Dafis\DataApi\Exception; use Neos\Flow\Exception; final class InvalidOrganizationGivenException extends Exception { protected $statusCode = 403; protected $referenceCode = 1608288610; }4 Sự kết luậnXử lý ngoại lệ đang trở thành một ngôi sao đang lên thay vì xử lý lỗi. Với vô số lợi thế và vô số khả năng, việc xử lý ngoại lệ dường như là tương lai của việc gỡ lỗi mã trong PHP Làm cách nào để lấy mã trạng thái từ ngoại lệ trong PHP?Ngoại lệ PHP Phương thức getCode()
.
Mã ngoại lệ PHP là gì?Một ngoại lệ là đối tượng mô tả lỗi hoặc hành vi không mong muốn của tập lệnh PHP . Các ngoại lệ được đưa ra bởi nhiều hàm và lớp PHP. Các hàm và lớp do người dùng định nghĩa cũng có thể đưa ra các ngoại lệ. Ngoại lệ là một cách hay để dừng một chức năng khi gặp dữ liệu mà nó không thể sử dụng.
Làm cách nào để in lỗi ngoại lệ trong PHP?Ngoại lệ PHP Phương thức getMessage()
.
Làm cách nào để bỏ qua ngoại lệ trong PHP?Có thể bỏ qua lỗi bên cạnh dòng mã vi phạm bằng cách sử dụng thẻ PHPDoc trong nhận xét. @phpstan-ignore-line . @ phpstan-bỏ qua-dòng tiếp theo. |