Hướng dẫn types of exception in php - các loại ngoại lệ trong php

Mục lục

  • Mở rộng ngoại lệ

PHP có một mô hình ngoại lệ tương tự như các ngôn ngữ lập trình khác. Một ngoại lệ có thể là throwN và bị bắt ("catched") trong PHP. Mã có thể được bao quanh trong một khối try, để tạo điều kiện cho việc bắt các ngoại lệ tiềm năng. Mỗi try phải có ít nhất một khối catch hoặc finally tương ứng.

Nếu một ngoại lệ được ném và phạm vi chức năng hiện tại của nó không có khối catch, thì ngoại lệ sẽ "bong bóng lên" ngăn xếp cuộc gọi đến hàm gọi cho đến khi tìm thấy khối catch phù hợp. Tất cả finally khối mà nó gặp trên đường đi sẽ được thực thi. Nếu ngăn xếp cuộc gọi không được chứng minh tất cả các phạm vi toàn cầu mà không gặp phải khối ____3 phù hợp, chương trình sẽ chấm dứt với một lỗi nghiêm trọng trừ khi một trình xử lý ngoại lệ toàn cầu đã được đặt.

Đối tượng ném phải là một thể hiện của lớp ngoại lệ hoặc một lớp ngoại lệ. Cố gắng ném một đối tượng không dẫn đến lỗi nghiêm trọng của PHP.Exception class or a subclass of Exception. Trying to throw an object that is not will result in a PHP Fatal Error.

Kể từ Php 8.0.0, từ khóa throw là một biểu thức và có thể được sử dụng trong bất kỳ ngữ cảnh biểu thức nào. Trong các phiên bản trước đó là một tuyên bố và được yêu cầu phải ở trên dòng riêng của nó.

catch

Khối catch xác định cách phản ứng với một ngoại lệ ném. Khối catch xác định một hoặc nhiều loại ngoại lệ hoặc lỗi mà nó có thể xử lý và tùy chọn là một biến để gán ngoại lệ. .

Nhiều khối catch có thể được sử dụng để bắt các lớp ngoại lệ khác nhau. Thực thi bình thường (khi không có ngoại lệ nào được ném trong khối try) sẽ tiếp tục sau khối catch cuối cùng được xác định theo trình tự. Các trường hợp ngoại lệ có thể là throwN (hoặc cảm ứng lại) trong một khối catch. Nếu không, việc thực thi sẽ tiếp tục sau khối catch được kích hoạt.

Khi một ngoại lệ được ném, mã theo câu lệnh sẽ không được thực thi và PHP sẽ cố gắng tìm khối catch khớp đầu tiên. Nếu một ngoại lệ không bị bắt, một lỗi nghiêm trọng của PHP sẽ được đưa ra với thông báo "throw4", trừ khi một trình xử lý đã được xác định với set_exception_handler ().set_exception_handler().

Kể từ Php 7.1.0, một khối catch có thể chỉ định nhiều ngoại lệ bằng cách sử dụng ký tự đường ống (throw6). Điều này rất hữu ích cho khi các ngoại lệ khác nhau từ các phân cấp lớp khác nhau được xử lý giống nhau.

Kể từ Php 8.0.0, tên biến cho một ngoại lệ bị bắt là tùy chọn. Nếu không được chỉ định, khối catch vẫn sẽ thực thi nhưng sẽ không có quyền truy cập vào đối tượng ném.

finally

Một khối finally cũng có thể được chỉ định sau hoặc thay vì các khối catch. Mã trong khối finally sẽ luôn được thực thi sau các khối trycatch, bất kể ngoại lệ có bị ném hay không và trước khi thực hiện bình thường tiếp tục.

Một tương tác đáng chú ý là giữa khối finally và câu lệnh catch5. Nếu một câu lệnh catch5 gặp phải bên trong các khối try hoặc catch, khối finally vẫn sẽ được thực thi. Hơn nữa, câu lệnh catch5 được đánh giá khi gặp phải, nhưng kết quả sẽ được trả về sau khi khối finally được thực thi. Ngoài ra, nếu khối finally cũng chứa câu lệnh catch5, giá trị từ khối finally được trả về.

try5

Nếu một ngoại lệ được phép bong bóng lên phạm vi toàn cầu, nó có thể bị bắt bởi một trình xử lý ngoại lệ toàn cầu nếu được đặt. Hàm set_exception_handler () có thể đặt hàm sẽ được gọi thay cho khối catch nếu không có khối nào được gọi. Hiệu ứng về cơ bản giống như khi toàn bộ chương trình được bọc trong khối ________ 4 -________ 3 với chức năng đó là catch.set_exception_handler() function can set a function that will be called in place of a catch block if no other block is invoked. The effect is essentially the same as if the entire program were wrapped in a try-catch block with that function as the catch.

Ghi chú

Ghi chú::

Các hàm PHP nội bộ chủ yếu sử dụng báo cáo lỗi, chỉ các tiện ích mở rộng hướng đối tượng hiện đại sử dụng các ngoại lệ. Tuy nhiên, các lỗi có thể dễ dàng được dịch sang các ngoại lệ với errorException. Kỹ thuật này chỉ hoạt động với các lỗi không gây tử vong, tuy nhiên.

Ví dụ #3 Chuyển đổi báo cáo lỗi thành ngoại lệ

try0

Ví dụ

Ví dụ #4 ném một ngoại lệ

try1

try2

try3

Ví dụ trên sẽ xuất ra:

0.2
Caught exception: Division by zero.
Hello World

Ví dụ #5 Xử lý ngoại lệ với khối finally

try1

try2

try7

Ví dụ trên sẽ xuất ra:

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World

Ví dụ #5 Xử lý ngoại lệ với khối finally

catch0

catch1

catch2

Ví dụ trên sẽ xuất ra:

Ví dụ #5 Xử lý ngoại lệ với khối finally

catch3

catch4

catch5

Ví dụ trên sẽ xuất ra:

Ví dụ #8 Xử lý ngoại lệ Multi Catch

catch3

catch4

catch8

Ví dụ trên sẽ xuất ra:

Ví dụ #9 bỏ qua biến bị bắt

Chỉ được phép trong Php 8.0.0 trở lên.

catch9

finally0

finally1

Ví dụ số 10 ném như một biểu thức

Chỉ được phép trong Php 8.0.0 trở lên.

catch9

finally0

finally4

Ví dụ số 10 ném như một biểu thức

Hỏi tại Nilpo Dot Com ¶

finally5

finally6

finally7

finally8

13 năm trước

Johan ¶

finally9

catch0

11 năm trước

catch1

Christof+php [at] insypro.com ¶

catch2

catch3

catch4

catch5

5 năm trước

Shot (Piotr Szotkowski) ¶

catch6

catch7

catch8

catch1

14 năm trước

Simo ¶

catch0

7 năm trước

Edu ¶

catch1

catch2

catch3

catch1

9 năm trước

mlaopane tại gmail dot com ¶

catch5

catch6

catch7

4 năm trước

Christof+php [at] insypro.com ¶

catch8

catch9

catch1

5 năm trước

Shot (Piotr Szotkowski) ¶

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
01

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
02

catch1

14 năm trước

Simo ¶

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
04

7 năm trước

Edu ¶

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
05

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
06

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
07

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
08

9 năm trước

mlaopane tại gmail dot com ¶

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
09

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
10

catch1

Có bao nhiêu loại ngoại lệ trong PHP?

Kể từ Php 7, PHP chia lỗi thành hai lớp duy nhất: ngoại lệ và lỗi.two unique classes: Exception and Error .

Một loại ngoại lệ là gì?

Một ngoại lệ là một sự kiện xảy ra trong quá trình thực hiện một chương trình phá vỡ luồng thông thường của các hướng dẫn của chương trình.Trong Java, các ngoại lệ là các đối tượng mô tả một điều kiện (lỗi) đặc biệt đã xảy ra trong một đoạn mã.objects that describe an exceptional (error) condition that has occurred in a piece of code.

Điều nào sau đây là ngoại lệ trong PHP?

OutofBoundException, OutofRangeException, OverflowException, UnderFlowException là ngoại lệ hợp lệ trong PHP. are valid exceptions in PHP.

Ngoại lệ chung trong PHP là gì?

Các trường hợp ngoại lệ ném vào PHP ném một ngoại lệ PHP chung gần như đơn giản như âm thanh.Tất cả chỉ cần 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ó.Ném ngoại lệ mới ('Thông báo ngoại lệ')instantiate an exception object—with the first parameter of the Exception constructor being the error message—and then, "throw" it. throw new Exception('Exception message')