PHPでのエラー・例外処理を詳しく解説

黄舟
リリース: 2023-03-15 13:54:02
オリジナル
1673 人が閲覧しました

プログラマーなら誰でも、開発中に間違いや他の理由によるエラーに遭遇したことがあるかもしれません。もちろん、ユーザーがアプリケーションの制約に従わない場合、使用時にエラーが発生することもあります。次の記事では主に PHP の一般的なエラーと例外処理について紹介します。必要な方は参考にしてください。例外やエラーにどのように対処すればよいでしょうか?この記事では、PHP のエラーと例外処理について詳しく説明し、参考と学習のために共有します。

1. PHP エラー処理について見てみましょう。 1. 構文エラー

2. 実行時エラー

3. ロジックエラー: エラーは表示されませんが、関数が間違っており、最も厄介です4. 3 つのレベル: 通知/警告/致命的なエラー (続行できません)実行)

5. エラー レポートの表示:

a. php.ini の error_reporting 項目を変更して、次のようにエラー レポートの種類を制限できます: error_reporting=E_ALL & ~E_NOTICE

b. スクリプト内のエラー表示を変更するには、 error_reporting(E_ALL & ~E_NOTICE) を使用します (推奨)

6. エラー レポートをカスタマイズします: set_error_handler() はい 次のように、エラーを表示するための所定のパラメーターを渡します:

 set_error_handler('reportError');
 $mess="";
 function reportError($error_type,$error_message,$error_file,$error_line){
 global $mess;
 $mess.="发生错误级别为{$error_type}类型,错位信息<b>{$error_message}</b>,在文件{$error_file}中,第{$error_line}行。<br>";
 }
 getType($a);
 echo "1111111<br>";
 getType();
 echo "2222<br>";
 echo $mess;
 /*发生错误级别为8类型,错位信息Undefined variable: a,在文件F:\projects\Frame\FrameTest\BackEnd\regularExpression.php中,第24行。
 发生错误级别为2类型,错位信息gettype() expects exactly 1 parameter, 0 given,在文件F:\projects\Frame\FrameTest\BackEnd\regularExpression.php中,第26行。*/
ログイン後にコピー

7. エラー ログを記録します

a. PHP.ini の display_errors を Off に設定し、log_errors を On に設定します

error_reporting=E_ALL & ~E_NOTICE

b.只修改某个脚本内的错误显示,可以使用error_reporting(E_ALL & ~E_NOTICE); (推荐)

6.自定义错误报告:set_error_handler()可以传入用以显示错误的预定参数,如下:


 try{
 echo "开车上班<br>";
 throw new Exception("车子爆胎了!");
 }catch(Exception $e){//相当于Exception $e = new Exception(&#39;&#39;);
 echo $e->getMessage().&#39;<br>&#39;;
 echo &#39;换上备胎,继续上班<br>&#39;;
 }
ログイン後にコピー

7.记录错误日志

a.将PHP.ini中display_errors设置为Off,log_errors设置为On

b.自定义日志目录error_log="C:/XX/XX/php_error.log"


c.也可以使用ini_set("display_errors","Off") b.ログ ディレクトリ error_log="C:/XX/XX/php_error.log"

c. ini_set("display_errors","Off") を使用することもできます。またはスクリプト内の ini_get 内部的に設定します

2. PHP 例外処理


1. try catch は統合されており、途中にコードは存在できません


2. 例外はシステム定義済みクラスです

3. 例外が発生した場合 オブジェクトがスローされた場合、例外オブジェクトは catch でクラスに渡されます


4. try の例外位置以降のコードは実行を継続せず、直接転送されます。実行用の catch に追加します


 set_error_handler(&#39;reportError&#39;);
 function reportError($error_type,$error_message,$error_file,$error_line){
 if($error_type==E_WARNING){
 throw new Exception("错误信息:{$error_message},错误文件:{$error_file},错误行数{$error_line}");
 }
 }
 function drive($a){
 echo $a;
 }
 try{
 echo "开车上班<br>";
 drive();//忘记传参,触发自定义错误函数中警告性错误,抛出异常
 }catch(Exception $e){//相当于Exception $e = new Exception(&#39;&#39;);
 echo $e->getMessage().&#39;<br>&#39;;
 echo "换上备胎,继续上班<br>";
 }
ログイン後にコピー

5. 例外処理はエラー処理と併用できます


 class BTException extends Exception {
 function __construct($message){
 parent::__construct($message);
 }
 function method(){
 return "打开后备箱,拿出工具,换备胎";
 }
 }
 try{
 echo "开车上班<br>";
 throw new BTException("车子爆胎了!");
 }catch(BTException $e){//相当于Exception $e = new Exception(&#39;&#39;);
 echo $e->getMessage().&#39;<br>&#39;;
 echo $e->method().&#39;<br>&#39;;
 echo "换上备胎,继续上班<br>";
 }
ログイン後にコピー

6. カスタム例外クラス


a. Exception クラスはすべての例外の基本クラスであり、特定の例外を定義しません。例外処理メソッド (プロンプトを取得するための一部のメソッドのみ)


b. カスタム例外クラスはシステム クラスのサブクラスである必要があります


c. Exception クラスを継続してコンストラクターを呼び出すことを忘れないでください。初期化のための親クラスのコンストラクター


 class Err1 extends Exception {
 function __construct($message){
 parent::__construct($message);
 }
 function method(){
 return "纠正错误1";
 }
 }
 class Err2 extends Exception {
 function __construct($message){
 parent::__construct($message);
 }
 function method(){
 return "纠正错误2";
 }
 }
 class Err3 extends Exception {
 function __construct($message){
 parent::__construct($message);
 }
 function method(){
 return "纠正错误3";
 }
 }
 $rand=rand(1,3);
 try{
 switch($rand){
 case 1:
 throw new Err1("发生错误1");
 case 2:
 throw new Err2("发生错误2"); 
 case 3:
 throw new Err3("发生错误3"); 
 }
 }catch(Err1 $e){
 echo $e->getMessage().&#39;<br>&#39;;
 echo $e->method().&#39;<br>&#39;;
 }catch(Err2 $e){
 echo $e->getMessage().&#39;<br>&#39;;
 echo $e->method().&#39;<br>&#39;;
 }catch(Err3 $e){
 echo $e->getMessage().&#39;<br>&#39;;
 echo $e->method().&#39;<br>&#39;;
 }
ログイン後にコピー

7. 複数の例外をキャプチャします。注意: try は try

rrreee

概要🎜🎜🎜 にネストすることもできます。

以上がPHPでのエラー・例外処理を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!