Làm cách nào để tạo ngoại lệ tùy chỉnh trong PHP?

Một ngoại lệ là tín hiệu cho biết một số loại sự kiện hoặc lỗi đặc biệt đã xảy ra. Các ngoại lệ có thể xảy ra do nhiều lý do, chẳng hạn như kết nối cơ sở dữ liệu hoặc truy vấn không thành công, tệp mà bạn đang cố truy cập không tồn tại, v.v.

PHP cung cấp một cơ chế xử lý ngoại lệ mạnh mẽ cho phép bạn xử lý các ngoại lệ một cách dễ dàng. Trái ngược với hệ thống xử lý lỗi truyền thống của PHP, xử lý ngoại lệ là phương pháp hướng đối tượng để xử lý lỗi, cung cấp hình thức báo cáo lỗi được kiểm soát và linh hoạt hơn. Mô hình ngoại lệ lần đầu tiên được giới thiệu trong PHP 5

Sử dụng Ném và Thử. Tuyên bố bắt

Theo cách tiếp cận dựa trên ngoại lệ, mã chương trình được viết trong một khối

Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
7, một ngoại lệ có thể được đưa ra bằng cách sử dụng câu lệnh
Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
8 khi một sự kiện đặc biệt xảy ra trong quá trình thực thi mã trong khối
Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
7. Sau đó, nó được bắt và giải quyết bằng một hoặc nhiều khối
Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
0

Ví dụ sau minh họa cách xử lý ngoại lệ hoạt động

$dividend / $divisor = $quotient";
    }
}
 
try{
    division[10, 2];
    division[30, -4];
    division[15, 0];
    
    // If exception is thrown following line won't execute
    echo '

All divisions performed successfully.

'; } catch[Exception $e]{ // Handle the exception echo "

Caught exception: " . $e->getMessage[] . "

"; } // Continue execution echo "

Hello World!

"; ?>

Bạn có thể tự hỏi mã này là gì. Chà, hãy lần lượt đi qua từng phần của mã này để hiểu rõ hơn

Giải thích mã

Hệ thống xử lý ngoại lệ của PHP về cơ bản có bốn phần.

Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
7,
Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
8,
Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
0 và lớp Ngoại lệ. Danh sách sau đây mô tả chính xác cách thức hoạt động của từng bộ phận

  • Hàm
    Caught Exception!";
        echo "

    Error message: " . $e->getMessage[] . "

    "; echo "

    File: " . $e->getFile[] . "

    "; echo "

    Line: " . $e->getLine[] . "

    "; echo "

    Error code: " . $e->getCode[] . "

    "; echo "

    Trace: " . $e->getTraceAsString[] . "

    "; } ?>
    1 trong ví dụ trên kiểm tra xem một ước số có bằng 0 không. Nếu đúng như vậy, một ngoại lệ sẽ được đưa ra thông qua câu lệnh
    Caught Exception!";
        echo "

    Error message: " . $e->getMessage[] . "

    "; echo "

    File: " . $e->getFile[] . "

    "; echo "

    Line: " . $e->getLine[] . "

    "; echo "

    Error code: " . $e->getCode[] . "

    "; echo "

    Trace: " . $e->getTraceAsString[] . "

    "; } ?>
    8 của PHP. Mặt khác, hàm này thực hiện phép chia sử dụng các số đã cho và hiển thị kết quả
  • Sau đó, hàm
    Caught Exception!";
        echo "

    Error message: " . $e->getMessage[] . "

    "; echo "

    File: " . $e->getFile[] . "

    "; echo "

    Line: " . $e->getLine[] . "

    "; echo "

    Error code: " . $e->getCode[] . "

    "; echo "

    Trace: " . $e->getTraceAsString[] . "

    "; } ?>
    1 được gọi trong khối
    Caught Exception!";
        echo "

    Error message: " . $e->getMessage[] . "

    "; echo "

    File: " . $e->getFile[] . "

    "; echo "

    Line: " . $e->getLine[] . "

    "; echo "

    Error code: " . $e->getCode[] . "

    "; echo "

    Trace: " . $e->getTraceAsString[] . "

    "; } ?>
    7 với các đối số khác nhau. Nếu một ngoại lệ được tạo trong khi thực thi mã trong khối
    Caught Exception!";
        echo "

    Error message: " . $e->getMessage[] . "

    "; echo "

    File: " . $e->getFile[] . "

    "; echo "

    Line: " . $e->getLine[] . "

    "; echo "

    Error code: " . $e->getCode[] . "

    "; echo "

    Trace: " . $e->getTraceAsString[] . "

    "; } ?>
    7, PHP sẽ dừng thực thi tại thời điểm đó và cố gắng tìm khối
    Caught Exception!";
        echo "

    Error message: " . $e->getMessage[] . "

    "; echo "

    File: " . $e->getFile[] . "

    "; echo "

    Line: " . $e->getLine[] . "

    "; echo "

    Error code: " . $e->getCode[] . "

    "; echo "

    Trace: " . $e->getTraceAsString[] . "

    "; } ?>
    0 tương ứng. Nếu nó được tìm thấy, mã bên trong khối
    Caught Exception!";
        echo "

    Error message: " . $e->getMessage[] . "

    "; echo "

    File: " . $e->getFile[] . "

    "; echo "

    Line: " . $e->getLine[] . "

    "; echo "

    Error code: " . $e->getCode[] . "

    "; echo "

    Trace: " . $e->getTraceAsString[] . "

    "; } ?>
    0 đó sẽ được thực thi, nếu không, một lỗi nghiêm trọng sẽ được tạo ra
  • Khối
    Caught Exception!";
        echo "

    Error message: " . $e->getMessage[] . "

    "; echo "

    File: " . $e->getFile[] . "

    "; echo "

    Line: " . $e->getLine[] . "

    "; echo "

    Error code: " . $e->getCode[] . "

    "; echo "

    Trace: " . $e->getTraceAsString[] . "

    "; } ?>
    0 thường bắt ngoại lệ được ném trong khối
    Caught Exception!";
        echo "

    Error message: " . $e->getMessage[] . "

    "; echo "

    File: " . $e->getFile[] . "

    "; echo "

    Line: " . $e->getLine[] . "

    "; echo "

    Error code: " . $e->getCode[] . "

    "; echo "

    Trace: " . $e->getTraceAsString[] . "

    "; } ?>
    7 và tạo một đối tượng [
    Please enter your E-mail address!"];
        }
        
        // Throw exception if email is not valid
        if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {           
            throw new InvalidEmailException["

    $email is not a valid E-mail address!

    "]; } // Display success message if email is valid echo "

    SUCCESS: Email validation successful.

    "; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>
    0] chứa thông tin ngoại lệ. Thông báo lỗi từ đối tượng này có thể được truy xuất bằng phương pháp Exception's
    Please enter your E-mail address!"];
        }
        
        // Throw exception if email is not valid
        if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {           
            throw new InvalidEmailException["

    $email is not a valid E-mail address!

    "]; } // Display success message if email is valid echo "

    SUCCESS: Email validation successful.

    "; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>
    1

Lớp Exception của PHP cũng cung cấp các phương thức

Please enter your E-mail address!"];
    }
    
    // Throw exception if email is not valid
    if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {           
        throw new InvalidEmailException["

$email is not a valid E-mail address!

"]; } // Display success message if email is valid echo "

SUCCESS: Email validation successful.

"; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>
2,
Please enter your E-mail address!"];
    }
    
    // Throw exception if email is not valid
    if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {           
        throw new InvalidEmailException["

$email is not a valid E-mail address!

"]; } // Display success message if email is valid echo "

SUCCESS: Email validation successful.

"; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>
3,
Please enter your E-mail address!"];
    }
    
    // Throw exception if email is not valid
    if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {           
        throw new InvalidEmailException["

$email is not a valid E-mail address!

"]; } // Display success message if email is valid echo "

SUCCESS: Email validation successful.

"; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>
4 và
Please enter your E-mail address!"];
    }
    
    // Throw exception if email is not valid
    if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {           
        throw new InvalidEmailException["

$email is not a valid E-mail address!

"]; } // Display success message if email is valid echo "

SUCCESS: Email validation successful.

"; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>
5 có thể được sử dụng để tạo thông tin gỡ lỗi chi tiết

Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>

Hàm tạo của Exception tùy chọn nhận thông báo ngoại lệ và mã ngoại lệ. Mặc dù thông báo ngoại lệ thường được sử dụng để hiển thị thông tin chung về lỗi đã xảy ra, nhưng mã ngoại lệ có thể được sử dụng để phân loại lỗi. Mã ngoại lệ đã cung cấp có thể được truy xuất sau thông qua phương pháp Exception's

Please enter your E-mail address!"];
    }
    
    // Throw exception if email is not valid
    if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {           
        throw new InvalidEmailException["

$email is not a valid E-mail address!

"]; } // Display success message if email is valid echo "

SUCCESS: Email validation successful.

"; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>
2

Mẹo. Ngoại lệ chỉ nên được sử dụng để biểu thị các điều kiện ngoại lệ; . g. , chuyển đến một vị trí khác trong tập lệnh tại một điểm cụ thể. Làm điều đó sẽ ảnh hưởng xấu đến hiệu suất của ứng dụng của bạn

Xác định ngoại lệ tùy chỉnh

Bạn thậm chí có thể xác định trình xử lý ngoại lệ tùy chỉnh của riêng mình để xử lý các loại ngoại lệ khác nhau theo một cách khác. Nó cho phép bạn sử dụng một khối

Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
0 riêng biệt cho từng loại ngoại lệ

Bạn có thể định nghĩa một ngoại lệ tùy chỉnh bằng cách mở rộng lớp Ngoại lệ, bởi vì Ngoại lệ là lớp cơ sở cho tất cả các ngoại lệ. Lớp ngoại lệ tùy chỉnh kế thừa tất cả các thuộc tính và phương thức từ lớp Ngoại lệ của PHP. Bạn cũng có thể thêm các phương thức tùy chỉnh của mình vào lớp ngoại lệ tùy chỉnh. Hãy xem ví dụ sau

Please enter your E-mail address!"];
    }
    
    // Throw exception if email is not valid
    if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {           
        throw new InvalidEmailException["

$email is not a valid E-mail address!

"]; } // Display success message if email is valid echo "

SUCCESS: Email validation successful.

"; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>

Trong ví dụ trên, chúng tôi đã dẫn xuất hai lớp ngoại lệ mới. EmptyEmailException và InvalidEmailException từ lớp cơ sở Ngoại lệ. Nhiều khối

Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
0 được sử dụng để hiển thị các thông báo lỗi khác nhau, tùy thuộc vào loại ngoại lệ được tạo

Vì các lớp ngoại lệ tùy chỉnh này kế thừa các thuộc tính và phương thức từ lớp Ngoại lệ nên chúng ta có thể sử dụng các phương thức của lớp Ngoại lệ như

Please enter your E-mail address!"];
    }
    
    // Throw exception if email is not valid
    if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {           
        throw new InvalidEmailException["

$email is not a valid E-mail address!

"]; } // Display success message if email is valid echo "

SUCCESS: Email validation successful.

"; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>
1,
Please enter your E-mail address!"];
    }
    
    // Throw exception if email is not valid
    if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {           
        throw new InvalidEmailException["

$email is not a valid E-mail address!

"]; } // Display success message if email is valid echo "

SUCCESS: Email validation successful.

"; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>
4,
Please enter your E-mail address!"];
    }
    
    // Throw exception if email is not valid
    if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {           
        throw new InvalidEmailException["

$email is not a valid E-mail address!

"]; } // Display success message if email is valid echo "

SUCCESS: Email validation successful.

"; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>
3, v.v. để lấy thông tin lỗi từ đối tượng ngoại lệ

Đặt Trình xử lý ngoại lệ toàn cầu

Như chúng ta đã thảo luận trước đó trong chương này nếu không bắt được ngoại lệ, PHP sẽ tạo ra Lỗi nghiêm trọng với thông báo "Ngoại lệ chưa được bắt. " thông điệp. Thông báo lỗi này có thể chứa thông tin nhạy cảm như tên tệp và số dòng xảy ra sự cố. Nếu bạn không muốn hiển thị thông tin đó cho người dùng, bạn có thể tạo một hàm tùy chỉnh và đăng ký nó với hàm

Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
52 để xử lý tất cả các ngoại lệ chưa được phát hiện

Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
5

Ghi chú. Một ngoại lệ chưa được phát hiện sẽ luôn dẫn đến việc chấm dứt tập lệnh. Vì vậy, nếu bạn muốn tập lệnh tiếp tục thực thi ngoài điểm xảy ra ngoại lệ, bạn phải có ít nhất một khối

Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
0 tương ứng cho mỗi khối
Caught Exception!";
    echo "

Error message: " . $e->getMessage[] . "

"; echo "

File: " . $e->getFile[] . "

"; echo "

Line: " . $e->getLine[] . "

"; echo "

Error code: " . $e->getCode[] . "

"; echo "

Trace: " . $e->getTraceAsString[] . "

"; } ?>
7

Làm cách nào để tạo 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ó .

Chúng tôi có thể tạo ngoại lệ tùy chỉnh không?

Trong Java, chúng ta có thể tạo các ngoại lệ của riêng mình là các lớp dẫn xuất của lớp Exception . Tạo Ngoại lệ của riêng chúng tôi được gọi là ngoại lệ tùy chỉnh hoặc ngoại lệ do người dùng xác định. Về cơ bản, các ngoại lệ tùy chỉnh Java được sử dụng để tùy chỉnh ngoại lệ theo nhu cầu của người dùng.

Làm cách nào để mở rộng ngoại lệ trong PHP?

Cú pháp của ngoại lệ tùy chỉnh PHP . Với lớp CustException ở trên hiện đã được tạo, chúng ta có thể ném một ngoại lệ tùy chỉnh như bên dưới. ném \CustExcep\CustException mới['Chèn thông báo Ngoại lệ vào đây'];extend another class from the Exception class which is already built in. With the above CustException class now created, we can throw a custom exception as below: throw new \CustExcep\CustException['Insert an Exception message here'];

Làm thế nào là ngoại lệ tùy chỉnh tạo giải thích với ví dụ?

Để tạo một ngoại lệ tùy chỉnh, chúng ta cần phải mở rộng lớp Ngoại lệ thuộc về java. gói lang . Ví dụ. Chúng tôi chuyển chuỗi tới hàm tạo của siêu lớp- Ngoại lệ thu được bằng cách sử dụng hàm “getMessage[]” trên đối tượng được tạo.

Chủ Đề