PHP エラーと例外処理の概要
PHP のエラーと例外処理の概要
PHP には、エラーと例外処理に関連する一連の関数が組み込まれています。この記事では、これらの関数のいくつかについて詳しく説明します。
http://leo108.com
set_error_handler およびrestore_error_handler
set_error_handler は、プログラムでエラーが発生したときに、対応するエラーをユーザー定義のロジックに引き渡して処理するように設定できます。 leo108 のブログ
しかし、E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING など、set_error_handler で指定されたすべてのエラーをキャプチャできるわけではありません。簡単に言うと、本来プログラムの終了を引き起こすエラーはキャプチャできません。捕獲。 PHP エラーと例外処理の概要
set_error_handler は 1 つのエラー処理ロジックのみを設定できます。 set_error_handler が複数回呼び出された場合、最後のものだけが有効になります:
leo108 のブログ
set_error_handler(function($errno, $errstr){ echo 'catch error1';});set_error_handler(function($errno, $errstr){ echo 'catch error2';});trigger_error('something error');
出力は leo108 のブログです
catch error2
http://leo108.com
サードパーティのコード ベースを作成するときに、呼び出し元のエラー処理に影響を与えずにコード ベースのエラーをキャプチャしたい場合は、restore_error_handler 関数を使用できます: PHP
function third_party_function() { //第三方类库的错误处理逻辑 set_error_handler(function() { //一些代码 }); //该第三方类库的逻辑 //一些代码 //复原错误处理逻辑 restore_error_handler();}
このようにして、サードパーティのコード ベースで発生した最初のエラーは、サードパーティのコード ベースのエラー処理ロジックによって捕捉されますが、このサードパーティのコード ベース外のエラーは引き続き元のロジックによって処理されます。
例外
エラー処理ロジックの戻り値が false の場合、PHP は組み込みのエラー処理ロジック (error_reporting の値に基づいて、エラー情報を出力するか、エラー ログを書き込むかなどを判断するなど) を呼び出します。 ; true を返すと、組み込みエラー処理ロジックは呼び出されません。処理ロジックは、カスタム エラー処理ロジックを実行した後、エラーがトリガーされた場所に戻り、実行を継続します。
Tuiku は恥知らずな Web サイトです
error_reporting と @ 記号はエラー処理ロジックの呼び出しには影響しません:
Tuiku は恥知らずな Web サイトです
error_eporting(0);set_error_handler(function($errno, $errstr){ echo 'catch error';});@trigger_error('something error');
上記のコードは出力します:
PHP
catch error
leo108 のブログ
set_error_handler で捕捉できないエラーの場合、一般的なエラーは E_ERROR と E_PARSE の 2 つだけです。前者は、設定値を超えるメモリ使用量、存在しないクラスのインスタンス化、または存在しない関数の呼び出しである可能性があり、後者は通常、セミコロンの欠落などの構文解析エラーです。 E_PARSE の場合、これは構文レベルのエラーであるため、それをキャプチャする方法はありません。ただし、E_ERROR の場合は、 register_shutdown_function と error_get_last で処理できます。 サンプル コードは次のとおりです。
Tuiku は恥知らずな Web サイトです
error_reporting(0);register_shutdown_function(function() { $error = error_get_last(); if ($error != null && $error['type'] == E_ERROR) { echo "fatal error catched:" . var_export($error, true); }});new test();
出力:
http://leo108.com
fatal error catch:array (
http://leo108.com
'type' => 1、PHP エラーと例外処理の概要
'message' => 'クラス 'test' が見つかりません'、PHP エラーと例外処理の概要
'file ' => '/tmp/error.php',
Tuiku は恥知らずな Web サイトです
'line' => 20,
PHP
)
leo108 のブログ
set_例外ハンドラーと復元_例外ハンドラー
これら2つの機能同様に、登録できる例外処理ロジックは 1 つだけです。復元できるのは、複数の登録のうちの最後の例外処理ロジックのみです。 leo108 のブログ
いくつかの小さな実験
エラー処理ロジックでのエラーのトリガー
set_error_handler(function($errno, $errstr){ echo 'catch error:' . $errstr . PHP_EOL; trigger_error('error in error handler');});trigger_error('origin error');
出力: leo108 のブログ
catch error:origin error
例外
PHP Notice: /tmp/error のエラー ハンドラーにエラーがあります。 php で15 行目
PHP エラーと例外処理の概要
結論: エラー処理ロジックのエラーを再度捕捉することはできません。 例外
例外処理ロジックで例外がスローされました
set_exception_handler(function(Exception $e){ echo 'catch exception:' . $e->getMessage() . PHP_EOL; throw new Exception('exception in exception handler');});throw new Exception('origin exception');
出力: TuiKu は恥知らずな Web サイトです
キャッチ例外: 原点例外
TuiKu は恥知らずな Web サイトです
PHP 致命的なエラー: キャッチされない例外 '例外' メッセージ '例外'例外ハンドラー内' /tmp/error.php:15 http://leo108.com/pid-2216.asp
スタック トレース: 例外
0 [内部関数]: {closure}(Object(Exception ))
1 [main]
/tmp/error.php の 15 行目でスロー http://leo108.com
結論: 例外処理ロジックでスローされた例外はキャッチされません http:// leo108.com/pid -2216.asp
例外とエラー処理ロジックが同時に定義され、例外はエラー処理ロジックでスローされ、エラーは例外処理ロジックでトリガーされます
set_exception_handler(function(Exception $e){ echo 'catch exception:' . $e->getMessage() . PHP_EOL; trigger_error('error in exception handler');});set_error_handler(function($errno, $errstr){ echo 'catch error:' . $errstr . PHP_EOL; throw new Exception('exception in error handler');});
エラーは外部でトリガーされます
trigger_error('origin error');
出力:
例外
キャッチエラー:原点エラー
http://leo108.com
キャッチ例外:エラーハンドラの例外
http://leo108.com
キャッチエラー:例外ハンドラのエラー
例外
PHP Fatal error: Uncaught exception ‘Exception’ with message ‘exception in error handler’ in /tmp/error.php:9
leo108's blog
Stack trace:
PHP
0 [internal function]: {closure}(1024, ‘error in except…’, ‘/tmp/error.php’, 5, Array)
1 /tmp/error.php(5): trigger error(‘error in except…’)
2 [internal function]: {closure}(Object(Exception))
3 [main]
thrown in /tmp/error.php on line 9
http://leo108.com/pid-2216.asp
结论:调用了两次错误处理逻辑,一次异常处理逻辑。
推酷是个无耻的网站
外部抛出异常
throw new Exception('origin exception');
输出:

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します
