こんにちはフロントエンドエンジニアのまさにょんです!
今回は、PHPの例外処理 try-catch-finally文とthrow new Exceptionの使い方について解説していきます。
目次
PHPの例外処理 (try-catch-finally文とthrow new Exceptionの使い方)
PHPの例外処理 try-catch-finally文や throwの投げ方などは、基本の考え方を理解すれば簡単です。
ポイントは、次のとおりです。
- try-ブロックに通常の処理を記述する。
- try-ブロックの中で、失敗でエラーとして処理したい箇所では
throw new Exception()
を使用する!
- try-ブロックの中で、失敗でエラーとして処理したい箇所では
- catch-ブロックに異常系の処理を記述する。
- finally-ブロックに 処理の「成功/失敗」(Success/Error)に関わらず、実行する処理を記述する!
上記の考え方をCodeで表現すると、次のとおりです。
Postされてきた file_name でファイルを新規作成するPHPCodeで処理の途中で失敗した場合は、
throw new Exception()
を使用して Error をスルーしています。
<?php
// [ PHPの例外処理 try-catch-finally-文と throw new Exception() の使い方 ]
// 1. try-ブロック => 通常の処理を記述する
try {
$file_name = null;
// Postされてくる file_name
// $file_name = $_REQUEST['file_name'] ? $_REQUEST['file_name'] : null;
$data_dir = dirname(__FILE__) . '/TestDir/';
// 1-1. file_name が null の場合は、異常系として、error-throwする!
if (!$file_name) throw new Exception("Error file name not set.", 101);
$file_create_result = file_put_contents("{$data_dir}{$file_name}", 'Robotama-Nanoda');
// 1-2. ファイルの作成が失敗した場合は、異常系として、error-throwする!
if (!$file_create_result) throw new Exception("Error when creating file. Failed to create file {$target_file_path}.", 102);
$response = [
'result' => true,
];
// 2. catch-ブロック => 異常系の処理インターファイスを記述する
} catch(Exception $e) {
$response = [
'result' => false,
'error' => $e->getMessage(), // Error-Message(第一引数)を取得する
'error_code' => $e->getCode(), // Error-Code(第二引数)を取得する
];
// 3. finally-ブロック => Success か Error かに関わらず、実行する処理を記述する!
// finally-ブロックの中に書いたコードは、 try および catch ブロックの後で常に実行されます。
} finally {
// Success か Error かに関わらず、Requestに対するResponseは、必ず返却する!
// => 今回は、Responseを返却する処理を finally に記述する!
// JSONデータを送信する
$json_response = json_encode($response);
var_export($json_response);
return $json_response;
};
// [ 実行結果 ]
// '{"result":false,"error":"Error file name not set.","error_code":101}'
Twitterやってます!Follow Me!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!