Hướng dẫn php exec catch error - lỗi bắt thực thi php


Các ngoại lệ được sử dụng để thay đổi luồng thông thường của tập lệnh nếu xảy ra lỗi được chỉ định.

Nội phân chính

  • Ngoại lệ là gì
  • Sử dụng cơ bản các ngoại lệ
  • Thử, ném và bắt
  • Ví dụ giải thích:
  • Tạo một lớp ngoại lệ tùy chỉnh
  • Ví dụ giải thích:
  • Tạo một lớp ngoại lệ tùy chỉnh
  • Ví dụ giải thích:
  • Tạo một lớp ngoại lệ tùy chỉnh
  • Ví dụ giải thích:
  • Tạo một lớp ngoại lệ tùy chỉnh
  • Nhiều trường hợp ngoại lệ
  • Ném lại ngoại lệ
  • Đặt trình xử lý ngoại lệ cấp cao nhất
  • Quy tắc cho các trường hợp ngoại lệ
  • Có thử bắt trong PHP không?

Nội phân chính

  • Ngoại lệ là gì
  • Sử dụng cơ bản các ngoại lệ
  • Thử, ném và bắt
  • Ví dụ giải thích:
  • Tạo một lớp ngoại lệ tùy chỉnh
  • Ví dụ giải thích:
  • Tạo một lớp ngoại lệ tùy chỉnh
  • Ví dụ giải thích:
  • Tạo một lớp ngoại lệ tùy chỉnh
  • Ví dụ giải thích:
  • Tạo một lớp ngoại lệ tùy chỉnh
  • Nhiều trường hợp ngoại lệ
  • Ném lại ngoại lệ
  • Đặt trình xử lý ngoại lệ cấp cao nhất
  • Quy tắc cho các trường hợp ngoại lệ
  • Có thử bắt trong PHP không?

Ngoại lệ là gì

Có thử bắt bắt dừng thực thi PHP không?

Làm thế nào là xử lý lỗi được thực hiện trong PHP?

Làm thế nào bạn có thể xử lý nhiều trường hợp ngoại lệ trong PHP?

  • Với Php 5 đã xuất hiện một cách xử lý các lỗi đối tượng mới.
  • Xử lý ngoại lệ được sử dụng để thay đổi luồng thông thường của thực thi mã nếu xảy ra một điều kiện lỗi (ngoại lệ) được chỉ định. Điều kiện này được gọi là một ngoại lệ.
  • Đây là những gì thường xảy ra khi một ngoại lệ được kích hoạt:

Trạng thái mã hiện tại được lưu

  • Việc thực thi mã sẽ chuyển sang hàm xử lý ngoại lệ được xác định trước (tùy chỉnh)
  • Tùy thuộc vào tình huống, trình xử lý sau đó có thể tiếp tục thực thi từ trạng thái mã đã lưu, chấm dứt thực thi tập lệnh hoặc tiếp tục tập lệnh từ một vị trí khác trong mã
  • Chúng tôi sẽ hiển thị các phương pháp xử lý lỗi khác nhau:
  • Sử dụng cơ bản các ngoại lệ
  • Tạo một trình xử lý ngoại lệ tùy chỉnh

Nhiều trường hợp ngoại lệ Exceptions should only be used with error conditions, and should not be used to jump to another place in the code at a specified point.


Sử dụng cơ bản các ngoại lệ

Ném lại một ngoại lệ

Đặt trình xử lý ngoại lệ cấp cao nhất

Lưu ý: Các trường hợp ngoại lệ chỉ nên được sử dụng với các điều kiện lỗi và không nên được sử dụng để nhảy đến một nơi khác trong mã tại một điểm được chỉ định.

Khi một ngoại lệ được ném, mã theo sau nó sẽ không được thực thi và PHP sẽ cố gắng tìm khối "bắt" phù hợp.
//create function with an exception
function checkNum($number) {
  if($number>1) {
    throw new Exception("Value must be 1 or below");
  }
  return true;
}

Nếu một ngoại lệ không bị bắt, một lỗi gây tử vong sẽ được đưa ra với một thông báo "ngoại lệ chưa được thực hiện".
checkNum(2);
?>

Hãy cố gắng ném một ngoại lệ mà không bắt được nó:

1) & nbsp; & nbsp; & nbsp;} & nbsp; & nbsp; return true; }: Uncaught exception 'Exception'
with message 'Value must be 1 or below' in C:\webfolder\test.php:6
Stack trace: #0 C:\webfolder\test.php(12):
checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6

Thử, ném và bắt

// kích hoạt Checknum ngoại lệ (2); ?>

Mã trên sẽ gặp lỗi như thế này:

  1. Lỗi nghiêm trọng: Ngoại lệ 'ngoại lệ' với giá trị thông báo 'phải là 1 hoặc dưới' trong C: \ WebFolder \ test.php: 6 Stack Trace: #0 C: \ WebFolder \ test.php (12): CheckNum (28) #1 {main} ném vào C: \ WebFolder \ test.php trên dòng 6
  2. Để tránh lỗi từ ví dụ trên, chúng ta cần tạo mã thích hợp để xử lý một ngoại lệ.
  3. Mã ngoại lệ thích hợp nên bao gồm:

try - Một hàm sử dụng ngoại lệ phải nằm trong khối "thử". Nếu ngoại lệ không kích hoạt, mã sẽ tiếp tục như bình thường. Tuy nhiên, nếu các tác nhân ngoại lệ, một ngoại lệ là "ném"

Khi một ngoại lệ được ném, mã theo sau nó sẽ không được thực thi và PHP sẽ cố gắng tìm khối "bắt" phù hợp.
//create function with an exception
function checkNum($number) {
  if($number>1) {
    throw new Exception("Value must be 1 or below");
  }
  return true;
}

Nếu một ngoại lệ không bị bắt, một lỗi gây tử vong sẽ được đưa ra với một thông báo "ngoại lệ chưa được thực hiện".
try {
  checkNum(2);
  //If the exception is thrown, this text will not be shown
  echo 'If you see this, the number is 1 or below';
}

Hãy cố gắng ném một ngoại lệ mà không bắt được nó:
catch(Exception $e) {
  echo 'Message: ' .$e->getMessage();
}
?>

Hãy cố gắng ném một ngoại lệ mà không bắt được nó:

1) & nbsp; & nbsp; & nbsp;} & nbsp; & nbsp; return true; }

Ví dụ giải thích:

// kích hoạt Checknum ngoại lệ (2); ?>

  1. Mã trên sẽ gặp lỗi như thế này:
  2. Lỗi nghiêm trọng: Ngoại lệ 'ngoại lệ' với giá trị thông báo 'phải là 1 hoặc dưới' trong C: \ WebFolder \ test.php: 6 Stack Trace: #0 C: \ WebFolder \ test.php (12): CheckNum (28) #1 {main} ném vào C: \ WebFolder \ test.php trên dòng 6
  3. Để tránh lỗi từ ví dụ trên, chúng ta cần tạo mã thích hợp để xử lý một ngoại lệ.
  4. Mã ngoại lệ thích hợp nên bao gồm:
  5. try - Một hàm sử dụng ngoại lệ phải nằm trong khối "thử". Nếu ngoại lệ không kích hoạt, mã sẽ tiếp tục như bình thường. Tuy nhiên, nếu các tác nhân ngoại lệ, một ngoại lệ là "ném"

throw - Đây là cách bạn kích hoạt một ngoại lệ. Mỗi "ném" phải có ít nhất một "bắt"



Tạo một lớp ngoại lệ tùy chỉnh

catch - Khối "bắt" lấy một ngoại lệ và tạo một đối tượng chứa thông tin ngoại lệ

Lớp ngoại lệ tùy chỉnh kế thừa các thuộc tính từ lớp ngoại lệ của PHP và bạn có thể thêm các chức năng tùy chỉnh vào nó.

Cho phép tạo một lớp ngoại lệ:

theo hàng().' trong '. $ this-> getfile () & nbsp; & nbsp; & nbsp; & nbsp ;.': '. $ this-> getMessage ().' không phải là địa chỉ e-mail hợp lệ '; & nbsp; & nbsp; & nbsp; & nbsp; return $ errorMsg; & nbsp; & nbsp;}}
class customException extends Exception {
  public function errorMessage() {
    //error message
    $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
    .': '.$this->getMessage().' is not a valid E-Mail address';
    return $errorMsg;
  }
}

$ email = "";

Hãy thử & nbsp; {& nbsp; & nbsp; // kiểm tra if & nbsp; ; & nbsp; & nbsp; ném CustomException mới ($ email); & nbsp; & nbsp;}}
  //check if
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
    //throw exception if email is not valid
    throw new customException($email);
  }
}

Catch (CustomException $ e) & nbsp; }?>
  //display custom message
  echo $e->errorMessage();
}
?>

Lớp mới là bản sao của lớp ngoại lệ cũ với việc bổ sung hàm errorMessage (). Vì nó là bản sao của lớp cũ và nó kế thừa các thuộc tính và phương thức từ lớp cũ, chúng ta có thể sử dụng các phương thức lớp ngoại lệ như getline () và getfile () và getMessage ().

Ví dụ giải thích:

Mã trên ném một ngoại lệ và bắt nó với một lớp ngoại lệ tùy chỉnh:

  1. Lớp CustomException () được tạo như một phần mở rộng của lớp ngoại lệ cũ. Bằng cách này, nó kế thừa tất cả các phương thức và thuộc tính từ lớp ngoại lệ cũ
  2. Hàm errorMessage () được tạo. Hàm này trả về một thông báo lỗi nếu địa chỉ e-mail không hợp lệ
  3. Biến email $ được đặt thành một chuỗi không phải là địa chỉ e-mail hợp lệ
  4. Khối "thử" được thực thi và một ngoại lệ được ném vì địa chỉ e-mail không hợp lệ
  5. Khối "Bắt" bắt được ngoại lệ và hiển thị thông báo lỗi

Nhiều trường hợp ngoại lệ

Có thể cho một tập lệnh sử dụng nhiều ngoại lệ để kiểm tra nhiều điều kiện.

Có thể sử dụng một số khối IF..else, một công tắc hoặc làm tổ nhiều ngoại lệ. Các ngoại lệ này có thể sử dụng các lớp ngoại lệ khác nhau và trả về các thông báo lỗi khác nhau:

theo hàng().' trong '. $ this-> getfile () & nbsp; & nbsp; & nbsp; . ':'. $ this-> getMessage (). ' không phải là địa chỉ e-mail hợp lệ '; & nbsp; & nbsp; & nbsp; trả về $ errormsg; & nbsp; }}
class customException extends Exception {
  public function errorMessage() {
    //error message
    $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
    .': '.$this->getMessage().' is not a valid E-Mail address';
    return $errorMsg;
  }
}

$ email = "";

Hãy thử & nbsp; {& nbsp; & nbsp; // kiểm tra if & nbsp; ; & nbsp; & nbsp; ném CustomException mới ($ email); & nbsp; & nbsp;}}
  //check if
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
    //throw exception if email is not valid
    throw new customException($email);
  }
  //check for "example" in mail address
  if(strpos($email, "example") !== FALSE) {
    throw new Exception("$email is an example e-mail");
  }
}

Catch (CustomException $ e) & nbsp; }?>
  echo $e->errorMessage();
}

Lớp mới là bản sao của lớp ngoại lệ cũ với việc bổ sung hàm errorMessage (). Vì nó là bản sao của lớp cũ và nó kế thừa các thuộc tính và phương thức từ lớp cũ, chúng ta có thể sử dụng các phương thức lớp ngoại lệ như getline () và getfile () và getMessage ().
  echo $e->getMessage();
}
?>

Ví dụ giải thích:

Mã trên ném một ngoại lệ và bắt nó với một lớp ngoại lệ tùy chỉnh:

  1. Lớp CustomException () được tạo như một phần mở rộng của lớp ngoại lệ cũ. Bằng cách này, nó kế thừa tất cả các phương thức và thuộc tính từ lớp ngoại lệ cũ
  2. Hàm errorMessage () được tạo. Hàm này trả về một thông báo lỗi nếu địa chỉ e-mail không hợp lệ
  3. Biến email $ được đặt thành một chuỗi không phải là địa chỉ e-mail hợp lệ
  4. Khối "thử" được thực thi và một ngoại lệ được ném vì địa chỉ e-mail không hợp lệ
  5. Khối "Bắt" bắt được ngoại lệ và hiển thị thông báo lỗi
  6. Nhiều trường hợp ngoại lệ

Có thể cho một tập lệnh sử dụng nhiều ngoại lệ để kiểm tra nhiều điều kiện.


Có thể sử dụng một số khối IF..else, một công tắc hoặc làm tổ nhiều ngoại lệ. Các ngoại lệ này có thể sử dụng các lớp ngoại lệ khác nhau và trả về các thông báo lỗi khác nhau:

theo hàng().' trong '. $ this-> getfile () & nbsp; & nbsp; & nbsp; . ':'. $ this-> getMessage (). ' không phải là địa chỉ e-mail hợp lệ '; & nbsp; & nbsp; & nbsp; trả về $ errormsg; & nbsp; }}

Hãy thử & nbsp; {& nbsp; & nbsp; // kiểm tra if & nbsp; ; & nbsp; & nbsp; & nbsp; ném công ty mới ($ email); & nbsp; & nbsp; Ném ngoại lệ mới ("Email $ là một ví dụ e-mail"); & nbsp; & nbsp;}}

Catch (CustomException $ e) & nbsp; {& nbsp; & nbsp; echo $ e-> errorMessage (); }
class customException extends Exception {
  public function errorMessage() {
    //error message
    $errorMsg = $this->getMessage().' is not a valid E-Mail address.';
    return $errorMsg;
  }
}

$ email = "";

bắt (ngoại lệ $ e) & nbsp; {& nbsp; & nbsp; echo $ e-> getMessage (); }?>
  try {
    //check for "example" in mail address
    if(strpos($email, "example") !== FALSE) {
      //throw exception if email is not valid
      throw new Exception($email);
    }
  }
  catch(Exception $e) {
    //re-throw exception
    throw new customException($email);
  }
}

Catch (CustomException $ e) & nbsp; }?>
  //display custom message
  echo $e->errorMessage();
}
?>

Ví dụ giải thích:

Mã trên kiểm tra nếu địa chỉ email chứa chuỗi "ví dụ" trong đó, nếu có, ngoại lệ được chuyển lại:

  1. Lớp CustomException () được tạo như một phần mở rộng của lớp ngoại lệ cũ. Bằng cách này, nó kế thừa tất cả các phương thức và thuộc tính từ lớp ngoại lệ cũ
  2. Hàm errorMessage () được tạo. Hàm này trả về một thông báo lỗi nếu địa chỉ e-mail không hợp lệ
  3. Biến email $ được đặt thành một chuỗi là địa chỉ e-mail hợp lệ, nhưng chứa chuỗi "Ví dụ"
  4. Khối "thử" chứa khối "thử" khác để có thể ném lại ngoại lệ
  5. Ngoại lệ được kích hoạt vì e-mail chứa chuỗi "Ví dụ"
  6. Khối "Catch" bắt được ngoại lệ và ném lại "CustomException"
  7. "CustomException" bị bắt và hiển thị thông báo lỗi

Nếu ngoại lệ không bị bắt trong khối "thử" hiện tại của nó, nó sẽ tìm kiếm một khối bắt ở "cấp cao hơn".


Đặt trình xử lý ngoại lệ cấp cao nhất

Hàm set_exception_handler() đặt chức năng do người dùng xác định để xử lý tất cả các ngoại lệ chưa được thực hiện:

getMessage (); }
function myException($exception) {
  echo "Exception: " . $exception->getMessage();
}

set_exception_handler ('myException');

ném ngoại lệ mới ('ngoại lệ chưa được xảy ra'); ?>
?>

Đầu ra của mã trên phải là một cái gì đó như thế này:

Ngoại lệ: Ngoại lệ không xảy ra Uncaught Exception occurred

Trong mã trên không có khối "bắt". Thay vào đó, trình xử lý ngoại lệ cấp cao nhất đã kích hoạt. Chức năng này nên được sử dụng để bắt các ngoại lệ chưa học.


Quy tắc cho các trường hợp ngoại lệ

  • Mã có thể được bao quanh trong một khối thử, để giúp nắm bắt các ngoại lệ tiềm năng
  • Mỗi khối thử hoặc "ném" phải có ít nhất một khối đánh bắt tương ứng
  • Nhiều khối bắt có thể được sử dụng để bắt các lớp ngoại lệ khác nhau
  • Các trường hợp ngoại lệ có thể được ném (hoặc ném lại) trong một khối bắt trong khối thử

Một quy tắc đơn giản: Nếu bạn ném một cái gì đó, bạn phải bắt nó.

Có thử bắt trong PHP không?

Phương pháp chính để xử lý các ngoại lệ trong PHP là thử. Tóm lại, việc bắt thử là một khối mã có thể được sử dụng để xử lý các ngoại lệ ném mà không làm gián đoạn việc 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 ném.. In a nutshell, the try-catch is a code block that can be used to deal with thrown exceptions without interrupting program execution. In other words, you can "try" to execute a block of code, and "catch" any PHP exceptions that are thrown.

Có thử bắt bắt dừng thực thi PHP không?

Hãy thử bắt trong PHP là một khối chứa mã quan trọng của chương trình để thực thi. Trong PHP, khối cuối cùng cũng được sử dụng để làm sạch mã. Sự khác biệt duy nhất là nó luôn luôn chạy bất kể ngoại lệ có bị ném hay không.it always runs regardless of whether or not an exception is thrown.

Làm thế nào là xử lý lỗi được thực hiện trong PHP?

Theo mặc định, PHP gửi nhật ký lỗi đến hệ thống ghi nhật ký của máy chủ hoặc tệp, tùy thuộc vào cách cấu hình ERROR_LOG được đặt trong PHP. Tệp INI. Bằng cách sử dụng hàm ERROR_LOG (), bạn có thể gửi nhật ký lỗi đến một tệp được chỉ định hoặc đích từ xa.By using the error_log() function you can send error logs to a specified file or a remote destination.

Làm thế nào bạn có thể xử lý nhiều trường hợp ngoại lệ trong PHP?

Quy tắc cho các trường hợp ngoại lệ..

Mã có thể được bao quanh trong một khối thử, để giúp nắm bắt các ngoại lệ tiềm năng ..

Mỗi khối thử hoặc "ném" phải có ít nhất một khối đánh bắt tương ứng ..

Nhiều khối bắt có thể được sử dụng để bắt các lớp ngoại lệ khác nhau ..

Các trường hợp ngoại lệ có thể được ném (hoặc ném lại) trong một khối bắt trong một khối thử ..