Ngoại lệ PHP lấy mã

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

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

class NoSuchControllerException extends \Neos\Flow\Mvc\Exception
{
    /**
     * @var integer
     */
    protected $statusCode = 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ậy

Hô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


<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
0 để điều này có hiệu lực

Và 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ết
  • Giới thiệu về Xử lý ngoại lệ
  • Sự cố khi một ngoại lệ được kích hoạt
  • Tại sao sử dụng xử lý ngoại lệ thay vì xử lý lỗi?
  • Các phương pháp xử lý ngoại lệ
  • Sự kết luận

điều kiện tiên quyết

Mộ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

  • Sự hiểu biết của người mới bắt đầu về ngôn ngữ lập trình PHP
  • Sự hiểu biết của người mới bắt đầu về lập trình nói chung

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.


<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
1 thường được sử dụng với khối

<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
2 hoặc khối

<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
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ình

chụp lấy

Bất cứ khi nào một ngoại lệ được ném vào


<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
1 của chương trình PHP, một mã trong

<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
0 sẽ được thực thi để cố gắng xử lý ngoại lệ đó.

<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
0 không thể tồn tại một mình. Thay vào đó, nó hoạt động cùng với

<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
1

ném

Từ 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ó


<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
0

cuối cùng


<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
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

<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
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ệ

Ngoại lệ PHP lấy mã

Sự cố khi một ngoại lệ được kích hoạt

Bấ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

  1. Mã hiện tại được lưu
  2. Việc thực thi mã được chuyển giao cho một chức năng xử lý ngoại lệ thường được xác định trước
  3. Sau đó, chức năng xử lý ngoại lệ sẽ tiến hành tiếp tục thực thi mã đã lưu, bắt đầu thực thi từ một vị trí khác trong mã hoặc thậm chí kết thúc hoàn toàn quá trình thực thi của chương trình. Quyết định này được đưa ra dựa trên bản chất của ngoại lệ

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

  • Nhóm loại lỗi. Xử lý ngoại lệ cho phép các lỗi được nhóm thành các lớp và cũng phân loại chúng thành các loại. Điều này không thể đạt được với xử lý lỗi thông thường
  • Tách mã xử lý lỗi khỏi mã thông thường, Xử lý ngoại lệ bằng cách sử dụng try…catch giúp mã chương trình tách biệt với mã xử lý lỗi do đó làm cho mã rõ ràng và dễ đọc

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


<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
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


<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>

Đ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


<?php
// Create function ConfirmNumber
function Confirm_Number($Num) 
{
  if($Num>1) 
  {
    throw new exception ("The number must be 1 or below");
  }
  return True;
}


try
 {
  Confirm_Number(2);

  
  print 'The number is 1 or below'
}


catch(Exception $e) 
{
  echo 'Message: ' .$e->get_message();
}
?>
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ận

Xử 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.