PHP thử mà không bắt

PHP try and catch là các khối có tính năng xử lý ngoại lệ, chứa mã xử lý ngoại lệ. Họ đóng một vai trò quan trọng trong việc xử lý ngoại lệ. Có một từ khóa quan trọng hơn được sử dụng với khối try-catch là ném. Ném là một từ khóa được sử dụng để ném một ngoại lệ

Mỗi khối thử phải có ít nhất một khối bắt. Mặt khác, một khối try cũng có thể có nhiều khối catch để xử lý các loại ngoại lệ khác nhau.

cú pháp

Cú pháp sau đây được sử dụng trong xử lý ngoại lệ để xử lý lỗi thời gian chạy -

Hãy cùng tìm hiểu về thử-ném-bắt chi tiết hơn

Khối thử chứa mã có thể chứa ngoại lệ. Một ngoại lệ được đưa ra trong khối thử trong thời gian chạy bị bắt bởi khối bắt. Do đó, mỗi khối thử phải có ít nhất một khối bắt. Nó bao gồm khối mã mà ngoại lệ có thể xảy ra

Những điểm sau đây cần được lưu ý về việc thử

  • Khối thử phải được theo sau bởi khối bắt hoặc khối cuối cùng
  • Một khối thử phải có ít nhất một khối bắt
  • Có thể có nhiều khối bắt với một khối thử

Khối catch bắt ngoại lệ được đưa ra trong khối try. Nó chứa mã để bắt ngoại lệ, được ném bằng từ khóa ném trong khối thử. Khối catch thực thi khi ném một ngoại lệ cụ thể. PHP tìm khối catch phù hợp và gán đối tượng ngoại lệ cho một biến

Các điểm cần lưu ý sau đây về việc đánh bắt

  • Có thể có nhiều hơn một khối bắt với một lần thử
  • Ngoại lệ ném ra được bắt và giải quyết bằng một hoặc nhiều lần bắt
  • Khối catch luôn được sử dụng với khối try. Nó không thể được sử dụng một mình
  • Nó xuất hiện ngay sau khối thử

ném

Nó là một từ khóa, được sử dụng để ném một ngoại lệ. Lưu ý rằng một lần ném ít nhất có một "khối bắt" để bắt ngoại lệ

Nó liệt kê các ngoại lệ do chức năng đưa ra, mà chính chức năng đó không thể xử lý được

cuối cùng

Nó là một khối chứa mã thiết yếu của chương trình để thực thi. Khối cuối cùng cũng được sử dụng cho hoạt động dọn dẹp trong PHP. Nó tương tự như khối catch, dùng để xử lý ngoại lệ. Sự khác biệt duy nhất là nó luôn thực thi cho dù một ngoại lệ có được xử lý hay không

Khối cuối cùng có thể được chỉ định sau hoặc thay cho khối bắt. Nó luôn thực thi ngay sau khối try and catch cho dù có ném ngoại lệ hay không và trước khi khởi động lại quá trình thực thi bình thường. Nó hữu ích trong các trường hợp sau - Đóng kết nối cơ sở dữ liệu, luồng

ví dụ 1

Hãy lấy một ví dụ để giải thích quy trình phổ biến của ném và bắt thử cũng như chặn cuối cùng

đầu ra

Exception Message: Value must be less than 1
It is finally block, which always executes.

ví dụ 2

đầu ra

Trong kết quả bên dưới, bạn có thể thấy rằng khi một số lẻ được thông qua, một thông báo ngoại lệ sẽ được hiển thị. Mặt khác, khi một số chẵn được chuyển, một thông báo khác sẽ được hiển thị

Output for ODD Number 
Exception Message: Passed number is an ODD Number
It is finally block, which always executes.

Output for EVEN Number
If you see this text, the passed value is an EVEN Number
It is finally block, which always executes.

ví dụ 2. Ngoại lệ tùy chỉnh và nhiều câu lệnh bắt

Trong ví dụ dưới đây, chúng tôi sẽ tạo một lớp ngoại lệ tùy chỉnh mở rộng lớp Ngoại lệ. Ở đây, chúng tôi cũng sẽ sử dụng nhiều khối bắt với một khối thử

PHP8. 0 trở lên cho phép sử dụng các khối try/catch trong đó câu lệnh catch() không tự bắt ngoại lệ cho một biến

Trước PHP 8. 0, một khối PHP try/catch điển hình phải ghi lại ngoại lệ trong câu lệnh catch

try {
  // try something
}
catch (\InvalidArgumentException $ex) { // "$ex" is required
  // handle the exception
}

Đôi khi, loại ngoại lệ (chẳng hạn như \InvalidArgumentException) là đủ để xác định cách xử lý ngoại lệ và nắm bắt ngoại lệ vào một biến (chẳng hạn như $ex trong ví dụ trên), PHP 8. 0 cho phép bỏ chụp ngoại lệ

  try {
    $container->get('api-keys.http2-pro');
  }
- catch (NotFoundExceptionInterface $exception) {
+ catch (NotFoundExceptionInterface) {
    $logger->log('API key not set');
  }

Một lời cảnh báo

Đảm bảo rằng loại ngoại lệ mà bạn catch đủ chi tiết để truyền đạt ý nghĩa của ngoại lệ. Ví dụ: bắt một ký tự đại diện

  try {
    $container->get('api-keys.http2-pro');
  }
- catch (NotFoundExceptionInterface $exception) {
+ catch (NotFoundExceptionInterface) {
    $logger->log('API key not set');
  }
1 hoặc
  try {
    $container->get('api-keys.http2-pro');
  }
- catch (NotFoundExceptionInterface $exception) {
+ catch (NotFoundExceptionInterface) {
    $logger->log('API key not set');
  }
2 mà không nắm bắt ngoại lệ có thể là một ý tưởng tồi nếu bạn định ghi lại sự kiện

PHP có thử bắt không?

Phương pháp xử lý ngoại lệ chính trong PHP là bắt thử . Tóm lại, try-catch là một khối mã có thể được sử dụng để xử lý các ngoại lệ được ném ra mà không làm gián đoạn quá trình thực thi chương trình. Nói cách khác, bạn có thể "thử" thực thi một khối mã và "bắt" bất kỳ ngoại lệ PHP nào được đưa ra.

Bạn có thể bắt mà không cần thử?

Có, có thể có khối thử mà không có khối bắt bằng cách sử dụng khối cuối cùng . Như chúng ta đã biết, một khối cuối cùng sẽ luôn thực thi ngay cả khi có một ngoại lệ xảy ra trong một khối thử, ngoại trừ Hệ thống. exit() nó sẽ thực thi luôn.

Làm cách nào để xử lý lỗi nghiêm trọng trong PHP?

Hà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 trường hợp 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.

Làm cách nào để ném ngoại lệ trong PHP?

Ném một ngoại lệ PHP chung gần như đơn giản như nó có vẻ. Tất cả những gì cần làm là khởi tạo một đối tượng ngoại lệ—với tham số đầu tiên của hàm tạo Ngoại lệ là thông báo lỗi—và sau đó, "ném" nó .