PHP Try Catch の例: 例外とエラー処理のチュートリアル

例外とは何ですか?

エラーとは、プログラム自体では処理できない、予期しないプログラムの結果です。

エラーはプログラムを修正することで解決されます。 エラーの例としては、実行が決して停止しない無限ループが挙げられます。

例外とは、プログラム自体で処理できる予期しないプログラムの結果です。

例外の例には、存在しないファイルを開こうとする場合が含まれます。

この例外は、ファイルを作成するか、ユーザーに se のオプションを提示することで処理できます。archiファイルのng。

なぜ例外を処理するのでしょうか?

  • エンドユーザーにとって非常に迷惑またはイライラさせる可能性のある予期しない結果がページ上に表示されることを避けてください。
  • 悪意のあるユーザーがアプリケーションを攻撃するために使用する可能性のある情報を公開しないことで、アプリケーションのセキュリティを向上させます。
  • Php 例外は、予測可能なエラーが発生した場合にプログラムの通常のフローを変更するために使用されます。

PHPエラー処理

エラーが発生した場合、構成設定に応じて、 PHP 発生したエラーに関連する情報を含むエラー メッセージを Web ブラウザに表示します。

PHP には、エラーを処理するさまざまな方法が用意されています。

一般的に使用される 3 つの方法を見ていきます。

  1. ダイステートメント– die 関数は、echo 関数と exit 関数を XNUMX つに組み合わせたものです。 エラー発生時にメッセージを出力してスクリプトの実行を停止したい場合に非常に便利です。
  2. カスタムエラーハンドラ – これらは、エラーが発生するたびに呼び出されるユーザー定義関数です。
  3. PHPエラーレポート – PHP エラー報告設定に応じたエラー メッセージ。 この方法は、開発環境でエラーの原因がわからない場合に非常に役立ちます。 表示される情報は、アプリケーションのデバッグに役立ちます。

エラー処理の例

次に、エラー処理ルーチンを使用した簡単な例をいくつか見てみましょう。

テキスト ファイルを使用してデータを保存するアプリケーションを開発したとします。 ファイルからデータを読み取る前に、ファイルの存在を確認したい場合があります。

以下のコードは上記の例を実装しています。

<?php
$denominator = 0;
echo 2 / $denominator;
?>

ファイル simple_error.php を phptuts フォルダーに保存したと仮定して、URL を開きます http://localhost/phptuts/simple_error.php

次の情報が得られますwing 結果

PHPエラー処理

上記の結果からわかるように、アプリケーションがプロフェッショナルに見えず、ユーザーにとって煩わしいものになる可能性があります。

上記のコードを変更して、アプリケーションのエラー ハンドラーを作成します。

<?php
$denominator = 0;
if ($denominator != 0) {
    echo 2 / $denominator;
} else {
    echo "cannot divide by zero (0)";
}
?>

上記のコードを error_handling.php として保存したと仮定して、URL を開きます。 http://localhost/phptuts/error_handling.php

PHP の PHP 例外ハンドル

注: sho の代わりに上記のようなメッセージを表示することは、セキュリティ上の良い習慣です。wing 「ファイルが見つかりません」のようなメッセージが表示されます。

カスタム エラー ハンドラーを使用する別の例を見てみましょう。

カスタム エラー ハンドラーはデフォルトの PHP エラー処理関数として設定され、基本的にエラー番号とメッセージを表示します。

以下のコードは、上記の例の実装を示しています。

<?php
function my_error_handler($error_no, $error_msg)
{
    echo "Opps, something went wrong:";
    echo "Error number: [$error_no]";
    echo "Error Description: [$error_msg]";
}
set_error_handler("my_error_handler");
echo (5 / 0);
?>

URLを開く http://localhost/phptuts/custom_error_handler.php あなたは次のことを得るでしょうwing 結果

. PHPエラー処理


上記の例からわかるように、カスタム エラー ハンドラーは次のような意味で強力です。

  • これらを使用すると、エラー メッセージをカスタマイズできます。
  • カスタム エラー ハンドラーには、ファイル/データベースへのエラー ログを含めることもできます。mail開発者など

次に、XNUMX 番目のタイプのエラー処理を見てみましょう。 PHP 組み込み関数 error_reporting 関数を使用します。 それには次のようなものがありますwing 基本的な構文

<?php
error_reporting($reporting_level);
?>

ここに、

  • 「error_reporting」はPHPのエラー報告関数です。
  • 「$reporting_level」はオプションで、レポート レベルの設定に使用できます。 レポート レベルが指定されていない場合、PHP は php.ini ファイルで指定されているデフォルトのエラー レポート レベルを使用します。
報告レベル Description
E_警告 警告メッセージのみを表示します。 スクリプトの実行を停止しません エラー報告(E_WARNING);
E_NOTICE プログラムの通常の実行中に発生する可能性のある通知、またはエラーの可能性がある通知を表示します。 error_reporting(E_ 通知);
E_USER_ERROR ユーザーが生成したエラー、つまりカスタム エラー ハンドラーを表示します。 error_reporting(E_USER_ERROR);
E_USER_WARNING ユーザーが生成した警告メッセージを表示します エラー報告(E_USER_WARNING);
E_USER_NOTICE ユーザーが作成した通知を表示します エラー報告(E_USER_NOTICE);
E_RECOVERABLE_ERROR 致命的ではなく、カスタム エラー ハンドラーを使用して処理できるエラーを表示します。 エラー報告(E_RECOVERABLE_ERROR);
E_ALL すべてのエラーと警告を表示します error_reporting(E_ALL);

エラーと例外の違い

  • 例外はスローされ、エラーは一般に回復不可能ですが、それをキャッチすることを目的としています。
  • 例外はオブジェクト指向の方法で処理されます。これは、例外がスローされたときを意味します。例外を含む例外オブジェクトが作成されます。tails.

次の表に、例外オブジェクトのメソッドを示します。

方法 Description
getMessage() 例外のメッセージを表示します
<?php
echo $e->getMessage();
?>
コードを取得() 例外を表す数値コードを表示します。
<?php
echo $e->getCode();
?>
getFile() 例外が発生したファイル名とパスを表示します
<?php
echo $e->getFile();
?>
getLine() 例外が発生した行番号を表示します
<?php
echo $e->getLine();
?>
getTrace() 例外前のバックトレースの配列を表示します
<?php
print_r( $e->getTrace());
?>
getPrevious() 現在の例外の前に前の例外を表示します
<?php
echo $e->getPrevious();
?>
getTraceAsString() 例外のバックトレースを配列ではなく文字列として表示します。
<?php
echo $e->getTraceAsString();
?>
__toString() 例外全体を文字列として表示します
<?php
echo $e->__toString();
?>


以下は thro の基本的な構文ですwing 例外。

<?php
throw new Exception("This is an exception example");
?>

ここに、

  • 「throw」は例外をスローするために使用されるキーワードです
  • 「new Exception(…)」は例外オブジェクトを作成し、「これは例外の例です」という文字列をメッセージパラメータとして渡します。

上記のコードは以下を出力しますwing メッセージ。

PHP の PHP 例外ハンドル

次に、例外のスローとキャッチを実装する例を見ていきます。

上記の例を変更して、try、throw、catch を含めます。

それには次のようなものがありますwing 基本的な構文。

<?php
try {
    //code goes here that could potentially throw an exception
}
catch (Exception $e) {
    //exception handling code goes here
}
?>

ここに、

  • 「try{…}」は、例外が発生する可能性がある実行されるコードのブロックです。
  • 「catch(Exception $e){…}」は、スローされた例外をキャッチし、例外オブジェクトを変数 $e に割り当てるコード ブロックです。

以下のコードは、try、throw、catch 例外が実装された基本的な例外の例を示しています。

プログラムは意図的に例外をスローし、それをキャッチします。

<?php
try {
    $var_msg = "This is an exception example";
    throw new Exception($var_msg);
}
catch (Exception $e) {
    echo "Message: " . $e->getMessage();
    echo "";
    echo "getCode(): " . $e->getCode();
    echo "";
    echo "__toString(): " . $e->__toString();
}
?>

URLを開く http://localhost/phptuts/exception_handling.php 次の情報が得られますwing 結果。

PHP の PHP 例外ハンドル

スローされた例外の種類に応じて、XNUMX つの PHP try ステートメントに対して複数の例外を作成することもできます。

に関する記事を参照してください MySQL、PHP データ アクセス…複数の例外の実装例については、

複数の例外

複数の例外では、複数の try catch ブロックを使用して、スローされた例外を処理します。 複数の例外は次の場合に役立ちます。

  • スローされた例外に応じてカスタマイズされたメッセージを表示したい
  • スローされた例外に応じて独自の操作を実行したい

以下のフローチャートは、複数の例外がどのように機能するかを示しています。

複数の例外

複数の例外を使用する例を見てみましょう。

渡された分母で数値を除算するコードを変更します。

XNUMX 種類の例外が発生することが予想されます。

  • ゼロ除算
  • 負の数による除算

わかりやすくするために、catch ブロックには例外タイプのみを表示します。

PHP に組み込まれた Exception クラスは、例外をスローするために使用されます。

例外クラスを拡張する XNUMX つのクラスを作成し、それらを使用して例外をスローします。

以下のコードは実装を示しています。

<?php
class DivideByZeroException extends Exception {};
class DivideByNegativeException extends Exception {};
function process($denominator)
{
	try
	{
		if ($denominator == 0)
		{
			throw new DivideByZeroException();
		}
		else if ($denominator < 0)
		{
			throw new DivideByNegativeException();
		}
		else
		{
			echo 25 / $denominator;
		}
	}
	catch (DivideByZeroException $ex)
	{
		echo "DIVIDE BY ZERO EXCEPTION!";
	}
	catch (DivideByNegativeException $ex)
	{
		echo "DIVIDE BY NEGATIVE NUMBER EXCEPTION!";
	}
	catch (Exception $x)
	{
	echo "UNKNOWN EXCEPTION!";
	}
}
process(0);
?>

コードのテスト

multiple_Exceptions.php を phptuts フォルダーに保存したと仮定します。

URL を参照してください http://localhost/phptuts/multiple_exceptions.php

PHP の PHP 例外ハンドル

PHP ファイルに戻り、以下に示すようにパラメータとして -1 を渡します。wing 図。

PHP の PHP 例外ハンドル

URL を参照してください http://localhost/phptuts/multiple_exceptions.php.

どのような結果が得られますか? パラメータとして 3 を渡します。

どのような結果が得られますか?

まとめ

  • エラーは、PHP コードによって生成される予期しない結果です。
  • エラー処理によりアプリケーションのパフォーマンスが向上します
  • PHP には、PHP がエラーを報告する方法をカスタマイズするために使用できる関数が組み込まれています。
  • 例外はエラーに似ていますが、スローされたときに catch ブロックを使用してキャッチできます。
  • エラー情報を示すエラー メッセージを表示することは、セキュリティ上悪い行為とみなされます。