PHPの例外処理 try-catch-finally文とthrow new Exceptionの使い方

PHP-try-catch

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、PHPの例外処理 try-catch-finally文とthrow new Exceptionの使い方について解説していきます。

PHPの例外処理 (try-catch-finally文とthrow new Exceptionの使い方)

PHPの例外処理 try-catch-finally文や throwの投げ方などは、基本の考え方を理解すれば簡単です。

ポイントは、次のとおりです。

  1. try-ブロックに通常の処理を記述する。
    • try-ブロックの中で、失敗でエラーとして処理したい箇所ではthrow new Exception() を使用する!
  2. catch-ブロックに異常系の処理を記述する。
  3. 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!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

プログラミング学習・エンジニア転職関連の情報

自宅で現役エンジニアから学べる『TechAcademy』 (エンジニア転職保証)

『GEEK JOBキャンプ』スピード転職コース(無料)

【IT道場】入校時0円! 就職目的プログラミングスクール

エンジニア転職なら100%「自社開発」求人に強い【クラウドリンク】

『techgym』 (Python特化・無料)

PHP / Laravel書籍

最近の投稿