こんにちは。明月です。
プログラミングで例外処理は重要です。例外処理はプログラムロジックで開発者が考えられなかったこと、ユーザから可笑しいデータを受け取ったものを処理する文法です。
link - [C# スタディ - 23] 例外処理(try〜catch,throwそしてfinally)
link - [Java スタディ - 19] 例外処理( try ~ catch)
特に「PHP」で他の言語と差別性があることではないです。
link - https://www.php.net/manual/en/language.exceptions.php
<?php
$title = "title";
function example() {
throw new Exception('Exception!!!');
}
$errorMessage = "";
$check = 0;
try {
example();
// checkの値に「1」を加算する。
$check += 1;
} catch(Exception $e) {
$errorMessage = $e;
} finally {
// checkの値を「1」を加算する。
$check += 1;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>
<?=$title?>
</title>
</head>
<body>
<?=$errorMessage?>
<br />
<!-- $checkの値を出力する。 -->
<?=$check?>
</body>
</html>
上の例をみれば、example関数は呼び出せたらthrowでexceptionが発生します。メインロジックで「try ~ catch ~ finally」の構文でtryの領域でexample関数を呼出します。
example関数ではExceptionで例外が発生して、catch領域に移動し、$errorMessageの変数にエラーメッセージのデータを入れます。
最終的に「try ~ catch」構文の関係なずに、finallyの領域に移動しますが、$checkデータを「1」を加算しますね。
結果をみるとエラーメッセージと$checkの値が「1」になることを確認できます。
ここで確認ポイントはtry領域でexample()関数を呼出した後checkの変数が加算するところがありますが、example関数でエラーが発生しましたので、checkの加算は実施してないです。
基本的にthrowを発生すると処理インタラプトの「try ~ catch」に移動しますが、Exceptionを継承してcatchを種類別で処理することもできます。
<?php
// Exceptionを継承する。
class MyException1 extends Exception { }
class MyException2 extends Exception { }
$title = "title";
function example($type) {
// MyException1のエラーを発生する。
if($type == 1 ){
throw new MyException1('MyException1!!!');
}
// MyException2のエラーを発生する。
if($type == 2){
throw new MyException2('MyException2!!!');
}
// 一般エラーを発生する。
throw new Exception('Exception!!!');
}
$errorMessage = "";
$check = 0;
try{
// $typeのパラメタに「1」が入れることでMyException1のエラーが発生する。
example(1);
$check += 1;
} catch(MyException1 $e) {
$errorMessage = $e;
$check = 100;
} catch(MyException2 $e){
$errorMessage = $e;
$check = 1000;
} catch(Exception $e){
$errorMessage = $e;
} finally {
$check += 1;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>
<?=$title?>
</title>
</head>
<body>
<?=$errorMessage?>
<br />
<!-- $checkは 100 + 1で 101が出力する。 -->
<?=$check?>
</body>
</html>
example関数に「1」という値をいれて「MyException1」を発生する。
catchでは「MyException1」、「MyException2」、「Exception」の例外を設定してエラー別で処理領域を分離しました。
結果をみれば「101」になりましたので、「MyExcepion1」が呼び出せ、finallyの領域に移動したことを確認できますね。
参考で文字上の例で「MyException1」が設定してない場合は「Exception」のエラーが発生されます。
「Exception」の領域が一番上に設定すると区分なしですべてのエラーがExceptionに通るので、一番下に配置しなければならないです。
- [PHP] 分散設定ファイル(.htaccess) 使用方法2020/01/28 03:00:00
- [PHP] データベース(mariaDB)を連結して使う方法2020/01/24 03:00:00
- [PHP] IOに関して2020/01/23 03:00:00
- [PHP] requireとinclude、そして「@」の使用方法2020/01/22 03:00:00
- [PHP] Fatal及びNotice,、Warningメッセージ処理する方法2020/01/19 03:00:00
- [PHP] xDebug設定する方法2020/01/18 03:00:00
- [PHP] $_SERVER, $GLOBALS, $_GET, $_POST, $_REQUEST, $_COOKIE, $_SESSION, $_FILES, $_ENV(getenv())2020/01/17 03:00:00
- [PHP] データ確認関数(var_dump, debug_zval_dump, print_r)2020/01/16 03:00:00
- [PHP] 例外処理(try ~ catch ~ finally)2020/01/15 03:00:00
- [PHP] 配列とリスト(list)2020/01/14 03:00:00
- [PHP] インタフェースと抽象クラス、クラス継承、parent、this2020/01/13 03:00:00
- [PHP] functionとclass使用方法、アクセス修飾子、そしてstatic2020/01/09 23:35:27
- [PHP] 基本ページ作成方法と変数使用方法2020/01/06 23:44:20
- [PHP] Composer設定2019/12/27 08:49:09
- [PHP] PHP 開発環境設定とEclipse(IDE)の設定2019/12/26 07:36:47
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07