検索
ホームページバックエンド開発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 までご連絡ください。
PHPの継続的な使用:その持久力の理由PHPの継続的な使用:その持久力の理由Apr 19, 2025 am 12:23 AM

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

PHPおよびPython:類似点と相違点を調査しますPHPおよびPython:類似点と相違点を調査しますApr 19, 2025 am 12:21 AM

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

PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

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

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

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

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

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

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

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

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

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

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

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

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 Mac版

SublimeText3 Mac版

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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