エラーと例外の類似点と相違点
「エラー」と「例外」の概念は非常に似ているため、混同しやすいですが、「エラー」と「例外」はどちらもプロジェクトに問題があることを示し、両方とも次のような意味を持ちます。関連情報があり、どちらにもエラー タイプがあります。ただし、「例外メカニズム」は「エラーメカニズム」の後に登場したものであり、「例外」は「エラー」を回避するという欠点です。さらに重要な点は、「エラー」情報が豊富ではないということです。これまでに見た最も一般的な関数の説明は、成功した場合に *** を返し、エラーが発生した場合に FALSE を返すというものです。ただし、関数エラーにはさまざまな理由が考えられます。 、およびエラーの種類は他にもあります。 単純な FALSE では呼び出し元に特定のエラー メッセージを伝えることはできません。
PHP では、コード自体の例外 (通常は環境または不正な構文が原因) がエラーになり、操作中に発生するエラーはコードでは処理できませんが、例外は try/catch で処理できます。
Exceptions
Exception は、問題が発生したときにスローされる Exception クラスのオブジェクトです。例外は、事前に責任を委任するために使用されます。例外は、潜在的な問題を予測し、その影響を軽減するために防御的に使用することもできます。
Exception オブジェクトには 2 つの主要なプロパティがあります。1 つはメッセージ、もう 1 つは数値コードです。これら 2 つのプロパティは、それぞれ getCode() と getMessage() を使用して取得できます。次のように:
<?php $exception = new Exception("figthing!!!",100); $code = $exception->getCode();//100 $message = $exception->getMessage();//fight.....
例外をスローします
例外がスローされると、コードの実行は直ちに停止され、後続のコードは、一致する「キャッチ」コード ブロックを見つけようとします。例外がキャッチされず、 set_Exception_handler() を使用して適切に処理されない場合、PHP は重大なエラーを生成し、Uncaught Exception... メッセージを出力します。
throw new Exception("this is a exception");//使用throw抛出异常
例外をキャッチする
スローされた例外をキャッチし、エレガントな方法で処理する必要があります。例外をインターセプトして処理する方法は、例外をスローするコードを try/catch ブロックに入れることです。また、複数の例外をインターセプトするために複数の catch が使用されている場合、PHP が適切な catch ブロックを見つけられない場合、例外は致命的なエラーによって PHP スクリプトが終了するまでバブルアップします。以下のように:
try { throw new Exception("Error Processing Request"); $pdo = new PDO("mysql://host=wrong_host;dbname=wrong_name"); } catch (PDOException $e) { echo "pdo error!"; } catch(Exception $e){ echo "exception!"; }finally{ echo "end!";//finally是在捕获到任何类型的异常后都会运行的一段代码 }
运行结果:exception!end!
例外ハンドラー
それでは、スローされる可能性のあるすべての例外をどのようにキャッチすればよいでしょうか? PHP では、グローバル例外ハンドラーを登録して、キャッチされなかった例外をすべてキャッチできます。例外ハンドラーは、set_Exception_handler() 関数を使用して登録されます (ここでは匿名関数が使用されています)。
set_exception_handler(function (Exception $e) { echo "我自己定义的异常处理".$e->getMessage(); }); throw new Exception("this is a exception"); //运行结果:我自己定义的异常处理this is a exception
エラー
例外に加えて、PHP にはエラーを報告する関数も用意されています。 PHP は、致命的なエラー、実行時エラー、コンパイル時エラー、起動エラー、ユーザーによって引き起こされるエラーなど、さまざまな種類のエラーを引き起こす可能性があります。エラー報告方法は php.ini で設定できます (ここではこれ以上の説明はありません)
いくつかのエラー報告レベルを示します:
值 常量 说明1 E_ERROR 报告导致脚本终止运行的致命错误2 E_WARNING 报告运行时的警告类错误(脚本不会终止运行)4 E_PARSE 报告编译时的语法解析错误8 E_NOTICE 报告通知类错误,脚本可能会产生错误32767 E_ALL 报告所有的可能出现的错误(不同的PHP版本,常量E_ALL的值也可能不同)
いずれの場合も、次のルールに従う必要があります:
必ず PHP に報告させてくださいエラー
エラーは開発環境で表示される必要があります
エラーは本番環境では表示されません
エラーは開発環境と本番環境の両方で記録される必要があります
エラーハンドラー
および例外ハンドラー 同様に、set_error_handler() を使用してグローバル エラー ハンドラーを登録し、独自のロジックを使用して PHP エラーをインターセプトして処理することもできます。エラーハンドラーで die() または exit() 関数を呼び出す必要があります。呼び出されない場合、PHP スクリプトはエラーが発生した時点から実行を継続します。以下の通り:
set_error_handler(function ($errno,$errstr,$errfile,$errline)//常用的四个参数 { echo "错误等级:".$errno."<br>错误信息:".$errstr."<br>错误的文件名:".$errfile."<br>错误的行号:".$errline; exit(); }); trigger_error("this is a error");//自行触发的错误 echo '正常';
実行結果:
エラーレベル: 1024
エラーメッセージ: これはエラーです
エラーファイル名:/Users/toby/Desktop/www/Exception.php
エラー行番号: 33
関連がありますまた、関数 register_shutdown_function() ---PHP の終了時に実行される関数です。 (興味のある方はご自身で確認してみてください)
例外に変換されたエラー
PHP エラーを例外に変換できます (すべてのエラーを変換できるわけではありません。変換できるのは、php.ini ファイルの error_reporting ディレクティブで設定されたエラーのみです)変換済み)、例外を処理するための既存のプロセスを使用してエラーを処理します。ここでは、set_error_handler() 関数を使用してエラー情報を ErrorException (Exception のサブクラス) にホストし、それを既存の例外処理システムに渡して処理します。以下の通り:
set_exception_handler(function (Exception $e) { echo "我自己定义的异常处理".$e->getMessage(); }); set_error_handler(function ($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline);//转换为异常 }); trigger_error("this is a error");//自行触发错误
操作結果: 自分で定義した例外処理これはエラーです
PHP7 エラー例外処理
PHP 7 改变了大多数错误的报告方式。不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为 Error 异常抛出。
这种 Error 异常可以像 Exception 异常一样被第一个匹配的 try / catch 块所捕获。如果没有匹配的 catch 块,则调用异常处理函数(事先通过 set_exception_handler() 注册)进行处理。 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error)。
Error 类并非继承自 Exception 类,所以不能用 catch (Exception $e) { ... } 来捕获 Error。你可以用 catch (Error $e) { ... },或者通过注册异常处理函数( set_exception_handler())来捕获 Error。
$a=1; try { $a->abc();//未定义此对象 } catch (Exception $e) { echo "error"; } catch (Error $e) { echo $e->getCode(); }
运行结果:0
PHP7 中出现了 Throwable 接口,该接口由 Error 和 Exception 实现,用户不能直接实现 Throwable 接口,而只能通过继承 Exception 来实现接口
try { // Code that may throw an Exception or Error. } catch (Throwable $t) { // Executed only in PHP 7, will not match in PHP 5.x } catch (Exception $e) { // Executed only in PHP 5.x, will not be reached in PHP 7 }
注意实际项目中,在开发环境中我们可以使用Whoops组件,在生产环境中我们可以使用Monolog组件。
相关推荐:
以上がPHP7のエラーと例外処理のサンプルの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

Dreamweaver Mac版
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。
