ホームページ  >  記事  >  バックエンド開発  >  PHP カスタム例外

PHP カスタム例外

WBOY
WBOYオリジナル
2024-08-29 13:06:10428ブラウズ

エラーが発生するとスクリプトの通常のフローが停止し、例外を使用して同じフローを変更できます。ユーザーは、PHP コードベースに既に組み込まれている例外クラスを拡張することで、ライブラリ、会社、またはアプリケーションの要件に従って例外をカスタム定義できます。ここではプロパティとメンバーが表示されます。これらはすべて子クラスの範囲内にあり、組み込みの例外クラスからフェッチされます。

広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

例外が発生した場合の処理​​は次のとおりです。

  • コードの現在の状態が最初に保存されます。
  • 例外ハンドラーは、コードの保存された状態から実行を継続するか、実行を終了するか、コードの別の場所から実行を継続します。

組み込みの例外とは別に特定の例外をカスタマイズする必要がある理由を教えてください:

  • コードの階層内でどのクラス、拡張機能、または文字列が例外を生成しているかを簡単に正確に認識できます。
  • これを使用すると、開発者はコード内の問題を簡単に見つけることができます。
  • DOM、PDO などの特定のライブラリ例外をブランド化するために使用できます。
  • 必要なだけカスタム例外を構成できます。

PHP カスタム例外の構文

カスタム例外をスローするには、既に組み込まれている Exception クラスから別のクラスを単純に拡張する必要があります。

namespace CustExcep;
class CustException extends \Exception { }

上記の CustException クラスが作成されたので、以下のようにカスタム例外をスローできます。

throw new \CustExcep\CustException('Insert an Exception message here');

必要に応じてこれをカスタマイズして、ファイル、コード、行、そのメッセージなどの特定のクラス プロパティをオーバーライドしたり、 __toString() メソッドを使用してこの例外メッセージを処理する必要のある形式に強制したりすることもできます。

PHP のカスタム関数の動作

いくつかの例を挙げて、この関数の動作を見てみましょう:

例 #1

コード:

<?php
/**
* Here defining a class for custom exception
*/
class CustException extends Exception
{
// Here we are redefining the exception message so it is not optional
public function __construct($exmsg, $val = 0, Exception $old = null) {
// random code goes here
$exmsg = 'Default';
// ensure assignment of all values correctly
parent::__construct($exmsg, $val, $old);
}
// representing the custom string object
public function __toString() {
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
}
public function custFunc() {
echo "Insert any custom message here\n";
}
}
/**
* This class to test the exception
*/
class ExceptionTest
{
public $var;
const NO_EXCEPTION = 0;
const CUST_EXCEPTION = 1;
const DEF_EXCEPTION = 2;
function __construct($val = self::NO_EXCEPTION) {
switch ($val) {
case self::CUST_EXCEPTION:
// throw custom exception
throw new CustException('1 is considered as invalid', 5);
break;
case self::DEF_EXCEPTION:
// throw default one.
throw new Exception('2 is considered an invalid parameter', 6);
break;
default:
// Will not throw any exception and creates an object here
$this->var = $val;
break;
}
}
}
// Example 1
try {
$new = new ExceptionTest(ExceptionTest::CUST_EXCEPTION);
} catch (CustException $exp) { // This exception will be caught
echo "Test custom exception is caught\n", $exp;
$exp->custFunc();
} catch (Exception $exp) { // This is skipped
echo "Default exception is caught here\n", $exp;
}

出力:

PHP カスタム例外

説明:

  • この例では、例外をカスタムスローする方法を見ていきます。これを行うには、まず、この目的のためのクラスを定義し、その中で、コンストラクターを使用して例外メッセージを再定義し、オプションではないようにします。例外メッセージをデフォルトのテキストに設定します。ここでは、使用しているすべてのパラメータが適切に割り当てられていることを確認する必要があります。これはエラーの原因となります。次に、custFunc() という別の関数を作成し、ここでカスタム例外メッセージを定義します。
  • switch ステートメントを使用して、これら 3 つの値に対して 3 つの異なるカスタム例外を定義しています。デフォルトの場合、例外はスローされず、必要なオブジェクトが作成されます。
  • これを試すために、値を CUST_EXCEPTION として渡して新しいオブジェクトを作成しようとしています。ここでは、最初に定義した custFunc() メソッドを呼び出します。したがって、これは定義された例外メッセージをフェッチし、同じものを表示します。

例 #2

コード:

<?php
class custException extends Exception {
public function custMsg() {
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid password. Please enter a valid one.';
return $errorMsg;
}
}
$pwd = "Password@123";
try {
//validation
if(filter_var($pwd, FILTER_VALIDATE_EMAIL) === FALSE) {
//exception thrown if password invalid
throw new custException($pwd);
}
}
catch (custException $error) {
//show custom error
echo $error->custMsg();
}
?>

出力:

PHP カスタム例外

説明:

  • このメッセージでは、適切なエラーをスローするための行番号も取得します。パスワード値を入力し、VALIDATE_PWD と比較します。これが true を返した場合、例外はスローされません。結果が false の場合、カスタム例外がスローされます。

PHP カスタム例外の利点

以下に利点を示します:

  • 組み込みの例外も優れていますが、開発者の観点からはカスタム例外の方が重要です。カスタム例外は、必要な場所で例外をターゲットにしてキャッチできるためです。
  • 開発者は複数のポイントでカスタム例外を定義し、同じ例外を処理できるため、デバッグが簡単です。
  • 既存の Exception クラスを簡単に変更し、拡張することでより効率的に使用できます。
  • 「キャッチされなかった」例外をキャッチするのに役立ちます。

結論

この記事では、例外のカスタム定義と処理の概念について説明しました。これは、try-catch ブロックなど、複数の例外のスロー、特定の例外の再スロー、トップクラスの例外ハンドラーの設定などによって使用できる他のケースもあります。

以上がPHP カスタム例外の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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