プログラムを実行する際にエラーが起こることがあります。通常はエラーが起こった際、そこでプログラムは止まりますが、エラーが起こってもプログラムに止まって欲しくない場合もあります。今回はその際に用いる構文について紹介します。
例外処理とは
例外処理とは、プログラムに異常が発生した場合に現在の処理を中断し、別の処理を行わせる処理のことをいいます。
例題処理の際に用いる構文
try-catch文
try-catch文は try{処理A}catch(Exception $e){処理Aでエラーが起きた際に行う処理} という形で記載します。引数eにはエラーメッセージが格納されます。PHPではエラー内容によって出力レベルが設定されています。 catch するエラーレベルや引数eにわたすエラーメッセージをカスタマイズしたい場合はset_error_handler関数を用います。
set_error_handler(function($errno, $errstr, $errfile, $errline) {
if (!(error_reporting() & $errno)) {
return;
}
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
});
try {
//処理A
} catch (Exception $e) {
//処理Aでエラーが起きた際に行う処理
};set_error_handler(function($errno, $errstr, $errfile, $errline) {
if (!(error_reporting() & $errno)) {
return;
}
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
});
try {
echo $name;
echo 'こんにちは';
} catch (Exception $e) {
echo 'こんばんは';
};出力結果
こんばんは変数nameを定義していないので本来エラーになるはずですが、エラー時の例外処理をcatchブロックの中に記載しているのでそちらが処理されます。
finally文
finally文は try{処理A}catch(Exception $e){処理Aでエラーが起きた際に行う処理} finally{最後に実行を行う処理} という形で記載します。finallyブロックは例外が発生してもしなくても実行されます。
try {
処理A
} catch (Exception $e) {
処理B
} finally {
処理C
}set_error_handler(function($errno, $errstr, $errfile, $errline) {
if (!(error_reporting() & $errno)) {
return;
}
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
});
try {
echo $name;
echo 'こんにちは';
} catch (Exception $e) {
echo 'こんばんは';
} finally {
echo 'finally文';
}出力結果
こんばんはfinally文上記の場合、tryのブロッック内処理でエラーとなるため、Exceptionをcatchしたブロック内の処理が実行された後にfinallyブロック内の処理が実行されます。
throw文
throw文は throw 発生させる例外の式; という形で記載します。
$point = 1;
try{
if ($point < 50){
throw new Exception('エラー!');
}
echo '合格です';
} catch(Exception $e) {
echo $e->getMessage();
}例題
以下コードの出力値はどれか
$point = 100;
try{
if ($point < 50){
throw new Exception('エラー!');
}
echo '合格です';
} catch(Exception $e) {
echo $e->getMessage();
}- ReferenceError: point is not defined
- エラー!!
- 合格です
- 不合格です
回答
3. 合格です
変数pointは50より大きいのでエラーは出ず、合格が出力されるため。
