エラーが発生するとスクリプトの通常のフローが停止し、例外を使用して同じフローを変更できます。ユーザーは、PHP コードベースに既に組み込まれている例外クラスを拡張することで、ライブラリ、会社、またはアプリケーションの要件に従って例外をカスタム定義できます。ここではプロパティとメンバーが表示されます。これらはすべて子クラスの範囲内にあり、組み込みの例外クラスからフェッチされます。
広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
例外が発生した場合の処理は次のとおりです。
組み込みの例外とは別に特定の例外をカスタマイズする必要がある理由を教えてください:
カスタム例外をスローするには、既に組み込まれている Exception クラスから別のクラスを単純に拡張する必要があります。
namespace CustExcep; class CustException extends \Exception { }
上記の CustException クラスが作成されたので、以下のようにカスタム例外をスローできます。
throw new \CustExcep\CustException('Insert an Exception message here');
必要に応じてこれをカスタマイズして、ファイル、コード、行、そのメッセージなどの特定のクラス プロパティをオーバーライドしたり、 __toString() メソッドを使用してこの例外メッセージを処理する必要のある形式に強制したりすることもできます。
いくつかの例を挙げて、この関数の動作を見てみましょう:
コード:
<?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 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(); } ?>
出力:
説明:
以下に利点を示します:
この記事では、例外のカスタム定義と処理の概念について説明しました。これは、try-catch ブロックなど、複数の例外のスロー、特定の例外の再スロー、トップクラスの例外ハンドラーの設定などによって使用できる他のケースもあります。
以上がPHP カスタム例外の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。