ホームページ バックエンド開発 PHPチュートリアル PHP7のエラーと例外処理のサンプルの共有

PHP7のエラーと例外処理のサンプルの共有

Mar 13, 2018 am 09:52 AM
php php7

エラーと例外の類似点と相違点

「エラー」と「例外」の概念は非常に似ているため、混同しやすいですが、「エラー」と「例外」はどちらもプロジェクトに問題があることを示し、両方とも次のような意味を持ちます。関連情報があり、どちらにもエラー タイプがあります。ただし、「例外メカニズム」は「エラーメカニズム」の後に登場したものであり、「例外」は「エラー」を回避するという欠点です。さらに重要な点は、「エラー」情報が豊富ではないということです。これまでに見た最も一般的な関数の説明は、成功した場合に *** を返し、エラーが発生した場合に 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 &#39;正常&#39;;
ログイン後にコピー

実行結果:
エラーレベル: 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组件。

相关推荐:

PHP错误处理方法实例

php错误处理和日志记录

PHP异常处理和错误处理方法分享

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPの永続的な関連性:それはまだ生きていますか? PHPの永続的な関連性:それはまだ生きていますか? Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

See all articles