LoginSignup
0
1

Laravelに向けたPHPで例外処理

Last updated at Posted at 2023-05-23

例外処理とは

プログラムの実行中に発生したエラー(例外)に対して、そのエラーをキャッチして特定の処理を行うことが例外処理です。エラーが発生した箇所でプログラムの実行が中断されることを防ぎ、プログラムが正常に継続するための仕組みです。例外のエラーのことをExceptionと言います。
例外が起きた時に行う処理を用意し、この一連の処理を例外処理と言います。

例外処理の書き方

<?php
try{
    $bool = false;//bool格納
    $bool->method();//メソッドを呼ぶ処理 //ここでエラー発生
    echo '通常処理が実行<br>';
//例外が起こりうる処理
} catch(Error $e){
//例外が起きた時の処理
echo '例外処理が実行<br>';
echo $e->getMessage();
}finally{
//例外が起きても起きなくても必ず実行される処理
echo '終了処理<br>';
}

//出力結果
//例外処理が実行
//Call to a member function method() on bool終了処理

tryではエラーが出ているので通常処理が実行は出力されません

複数のcatch節

下のように***複数のcatch節つまるcatch{}***を書けます。

<?php
try{
    new PDO('','','');
    $bool = false;//bool格納
    $bool->method();//メソッドを呼ぶ処理 //ここでエラー発生

    echo '通常処理が実行<br>';

//例外が起こりうる処理
} catch(PDOException $e){
    //例外が起きた時の処理
    echo 'PDOException<br>';
    echo '例外処理が実行<br>';
    echo $e->getMessage() .'<br>';

} catch(Error $e){
    //例外が起きた時の処理
    echo '例外処理が実行<br>';
    echo $e->getMessage() .'<br>';

} finally{
//例外が起きても起きなくても必ず実行される処理
echo '終了処理<br>';
}

//PDOException
//例外処理が実行
//PDO::__construct(): Argument #1 ($dsn) must be a valid data source name
//終了処理

上のnew PDO('','','');をコメントアウトすると

例外処理が実行
Call to a member function method() on bool
終了処理

と出力されます。エラーが出る場所によって表示が変わってきます。

throwException(); をtryの外に書くとエラーが発生します。

<?php

function throwException(){
    $bool = false;
    $bool->method();
}
throwException(); //ここに記述だとエラー

try{
    // new PDO('','','');
    $bool = false;//bool格納
    $bool->method();//メソッドを呼ぶ処理 //ここでエラー発生

    echo '通常処理が実行<br>';

//例外が起こりうる処理
} catch(PDOException $e){
    //例外が起きた時の処理
    echo 'PDOException<br>';
    echo '例外処理が実行<br>';
    echo $e->getMessage() .'<br>';

} catch(Error $e){
    //例外が起きた時の処理
    echo '例外処理が実行<br>';
    echo $e->getMessage() .'<br>';

} finally{
//例外が起きても起きなくても必ず実行される処理
echo '終了処理<br>';
}
echo 'finallyは終了しました';

throwException();をtryの中に書くと例外処理は実行されます。

<?php

function throwException(){
    $bool = false;
    $bool->method();
}

try{
    // new PDO('','','');
    $bool = false;//bool格納
    $bool->method();//メソッドを呼ぶ処理 //ここでエラー発生
    throwException();

    echo '通常処理が実行<br>';

//例外が起こりうる処理
} catch(PDOException $e){
    //例外が起きた時の処理
    echo 'PDOException<br>';
    echo '例外処理が実行<br>';
    echo $e->getMessage() .'<br>';

} catch(Error $e){
    //例外が起きた時の処理
    echo '例外処理が実行<br>';
    echo $e->getMessage() .'<br>';

} finally{
//例外が起きても起きなくても必ず実行される処理
echo '終了処理<br>';
}
echo 'finallyは終了しました';

//例外処理が実行
//Call to a member function method() on bool
//終了処理
//finallyは終了しました

資料

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1