ホームページ php教程 php手册 PHP が例外処理エラーをスローする仕組み

PHP が例外処理エラーをスローする仕組み

Jun 13, 2016 pm 12:11 PM
exception php 存在する 対処する どうやって 異常な 投げる はい 知る 間違い

まず第一に、PHP 例外とは何なのかを知る必要があります。

例外は、指定されたエラーが発生したときにスクリプトの通常のフローを変更するために使用されます。
PHP 5 は、新しいオブジェクト指向のエラー処理メソッドを提供します。
例外処理は、指定されたエラー (例外) 状況が発生したときにスクリプトの通常のフローを変更するために使用されます。この状況を例外と呼びます。

例外がトリガーされると、通常は次のようなことが起こります。

現在のコードの状態が保存されます
コードの実行が事前定義された例外ハンドラー関数に切り替わります
状況に応じて、ハンドラー おそらく、保存されたコード状態からコード実行を再開するか、スクリプト実行を終了するか、コード内の別の場所からスクリプト実行を継続します
さまざまなエラー処理方法を示します:

例外の基本的な使用法
カスタム例外ハンドラーの作成
複数の例外
例外の再スロー
トップレベルの例外ハンドラーの設定
例外の基本的な使用法
例外がスローされると、それに続くコードの実行は続行されず、PHP一致するコードの「キャッチ」ブロックを見つけようとします。

例外がキャッチされず、対応する処理に set_Exception_handler() を使用する必要がない場合は、重大なエラー (致命的エラー) が発生し、「Uncaught Exception」というエラー メッセージが出力されます。

例外をキャッチせずにスローしてみましょう:

コードをコピーします コードは次のとおりです:


//例外を持つ関数を作成function
checkNum($number) {
if($number>1) {
throw new Exception(”値は 1 以下である必要があります " );
} return true;
}
//trigger
?>

上記のコードは次のようになります。エラー:

致命的エラー: C:webfoldertest.php:6 のメッセージ「値は 1 以下である必要があります」を伴うキャッチされない例外 '例外' スタック トレース: #0 C:webfoldertest.php(12): checkNum (28) #1 {main} が C:webfoldertest.php の 6 行目でスローされました
Try、throw、catch
上記の例のエラーを回避するには、例外を処理する適切なコードを作成する必要があります。

ハンドラー処理には以下を含める必要があります。

Try - 例外を使用する関数は、「try」ブロック内に含める必要があります。例外がトリガーされない場合、コードは通常どおり実行を続行します。ただし、例外がトリガーされると、例外がスローされます。
Throw - 例外をトリガーする方法を指定します。各「スロー」は少なくとも 1 つの「キャッチ」に対応する必要があります
Catch - 「キャッチ」コード ブロックは例外をキャッチし、例外情報を含むオブジェクトを作成します
例外をトリガーしましょう:

< ;?php//例外をスローできる関数を作成する function checkNum($number) { if($number>1) { throw new Exception("値は 1 以下である必要があります") } return true; /In 例外は "try" コード ブロックでトリガーされます try { checkNum(2); // 例外がスローされた場合、このテキストは表示されません echo 'これが表示される場合、番号は 1 以下です' } //例外をキャッチします catch (Exception $e) { echo 'Message: ' .$e->getMessage() }?>
上記のコードは次のようなエラーを受け取ります:
メッセージ: 値は 1 以下でなければなりません
説明例:
上記のコードは例外をスローし、それをキャッチします:

checkNum() 関数を作成します。数値が 1 より大きいかどうかを検出します。その場合は、例外をスローします。
「try」コード ブロックで checkNum() 関数を呼び出します。
checkNum() 関数で例外がスローされました
「catch」コード ブロックは例外を受け取り、例外情報を含むオブジェクト ($e) を作成します。
この例外オブジェクトから $e->getMessage() を呼び出すと、例外からのエラー メッセージが出力されます
ただし、「各スローはキャッチに対応する必要がある」という原則に従うために、次のようにすることができます。見逃したエラーを処理するためにトップレベルの例外プロセッサを設定します。
カスタム例外クラスの作成
カスタム例外ハンドラーの作成は非常に簡単です。 PHP で例外が発生したときに関数が呼び出される特殊なクラスを作成しただけです。このクラスは例外クラスの拡張である必要があります。

このカスタム例外クラスは、PHP の例外クラスのすべてのプロパティを継承しており、カスタム関数を追加できます。

例外クラスの作成を開始します:


コードをコピーします コードは次のとおりです:


classcustomException extends Exception {
public function errorMessage() {
//エラーメッセージ
$errorMsg = '行のエラー '.$this-> ;getLine().' '.$this->getFile() .': '.$this->getMessage().' ; return $errorMsg;
}
}
$email = “someone@example…com”;try {
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) == = FALSE) {
//電子メールが無効な場合は例外をスローします throw
newcustomException($email)
}
}catch (customException $e)
{
//カスタム メッセージを表示します
echo $e->errorMessage();
}?> この新しいクラスは、古い例外クラスのコピーに errorMessage() 関数を追加したものです。 。古いクラスのコピーであるため、古いクラスからプロパティとメソッドが継承され、getLine()、getFile()、getMessage() などの例外クラスのメソッドを使用できます。

例の説明:
上記のコードは例外をスローし、カスタム例外クラスを通じてそれをキャッチします:

customException() クラスは古い例外クラスとして使用されます。拡大。このようにして、古いクラスのすべてのプロパティとメソッドを継承します。
errorMessage() 関数を作成します。電子メール アドレスが不正な場合、関数はエラー メッセージを返します
$email 変数に不正な電子メール アドレス文字列を設定します
電子メール アドレスが不正であるため、「try」コード ブロックを実行しますしたがって、例外がスローされます
「キャッチ」コード ブロックは例外をキャッチし、エラー メッセージを表示します
複数の例外
スクリプトで複数の例外を使用して、複数の状況を検出できます。

複数の if..else コード ブロックまたは switch コード ブロックを使用したり、複数の例外をネストしたりできます。これらの例外は、異なる例外クラスを使用し、異なるエラー メッセージを返す可能性があります。



コードをコピー

コードは次のとおりです。 < ?php

classcustomException extends Exception{public function errorMessage(){

//error
message$errorMsg = '.$this->getLine() の行でエラーが発生しました。' ->getFile().': '.$this->getMessage().'
return $errorMsg; }
}
$email = "someone@example.com";try {
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
/ //電子メールが無効な場合は例外をスローします throw new
customException($email)
}
//メールアドレスの「example」をチェックします
if(strpos($email, “example”) !== FALSE) { throw new Exception(“$email は電子メールの例です”) } }catch (customException $e) { echo $e->errorMessage() }catch(Exception $e); $e->getMessage(); }?>


例の説明:
いずれかの条件が真でない場合、例外がスローされます。 🎜 >
customException() クラスは、古い例外クラスの拡張として作成されました。このようにして、古いクラスのすべてのプロパティとメソッドを継承します。

errorMessage() 関数を作成します。電子メール アドレスが無効な場合、この関数はエラー メッセージを返します。
「try」コード ブロックを実行すると、最初の条件では例外はスローされません。
電子メールには文字列「example」が含まれているため、2 番目の条件により例外がトリガーされます。
「キャッチ」コード ブロックは例外をキャッチし、適切なエラー メッセージを表示します。
customException がキャッチされない場合は、基本例外がしっかりとキャッチされ、例外はそこで処理されます。
例外の再スロー
例外がスローされたときに、標準の方法とは異なる方法で処理したい場合があります。例外は「catch」ブロックで再度スローできます。

スクリプトはシステム エラーをユーザーから隠す必要があります。システム エラーはプログラマにとって重要かもしれませんが、ユーザーはそれらに興味がありません。ユーザーが簡単にできるように、わかりやすいメッセージを付けて例外を再度スローできます:



コードをコピー

コードは次のとおりです:

classcustomException extends Exception { public function errorMessage() { //エラーメッセージ

$errorMsg = $this->getMessage().' は有効ではありません。メールアドレス。'; return $errorMsg; } }$email = “someone@example.com”;try {

//メールアドレスの「example」をチェックする
if(strpos($email) , “例”) !== FALSE) {
//メールが無効な場合は例外をスロー throw new
Exception($email) } } catch(Exception $e) {
//re- throwException throw new
customException($email); } }catch (customException $e) {
// カスタムメッセージを表示
echo $e->errorMessage() }
?>


例の説明:
上記のコードは、電子メール アドレスに文字列「example」が含まれているかどうかを検出します。その場合は、再度例外をスローします:

CustomException() クラスは、古い例外クラスの拡張として作成されました。このようにして、古いクラスのすべてのプロパティとメソッドを継承します。
errorMessage() 関数を作成します。電子メール アドレスが無効な場合、この関数はエラー メッセージを返します。
$email 変数を有効な電子メール アドレスに設定しますが、文字列「example」が含まれます。
「try」ブロックには別の「try」ブロックが含まれているため、例外を再度スローできます。
電子メールに文字列「example」が含まれているため、例外がトリガーされます。
「catch」は例外をキャッチし、「customException」を再スローします。
「customException」をキャッチし、エラー メッセージを表示します。
例外が現在の「try」ブロックでキャッチされない場合は、より高いレベルで catch ブロックを探します。
トップレベル例外ハンドラーの設定
set_Exception_handler() 関数は、キャッチされなかった例外をすべて処理するユーザー定義関数を設定できます。

コードをコピー コードは次のとおりです。


function myException($Exception){
echo "Exception: " , $Exception->getMessage();
}
set_Exception_handler('myException')
throw new Exception('Uncaught Exception);発生しました') ;
?>


上記のコードの出力は次のようになります:

例外: キャッチされない例外が発生しました
上記のコードでは、 「キャッチ」コード ブロックはなく、代わりにトップレベルの例外ハンドラーをトリガーします。この関数は、キャッチされなかった例外をすべてキャッチするために使用する必要があります。
例外ルール
例外処理を必要とするコードは、潜在的な例外をキャッチするために try ブロック内に配置する必要があります。
各 try ブロックまたは throw ブロックには、対応する catch ブロックが少なくとも 1 つ必要です。
複数の catch ブロックを使用して、さまざまな種類の例外をキャッチします。
例外は、try ブロック内の catch ブロックで再スローできます。
要するに: 例外がスローされた場合は、それをキャッチする必要があります。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

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プログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles