try-catch-finallyの挙動を調べてみる
try-catch-finallyのcatchの中でreturnや例外発生をさせた場合の挙動を調べてみます。
対象言語はJavaScript、PHPです。
結論としては、JavaScriptとPHPで挙動は同じです。
結論
- catch内のreturn文は動作しない
- catch内で例外発生した場合
- finallyが実行される
- 例外も発生される
上記の動作となりました。
JavaScript
JavaScriptでcatchの中でreturnした場合
↓調査した際のプログラム↓
function test() {
try {
throw 'error'
}catch(e){
console.log('catch');
return 'catch return';
}finally{
console.log('finally');
return 'finally return';
}
}
console.log(test());↓出力結果↓
catch finally finally return
catchのあとにfinallyが実行されていることが分かる
→catch内のreturn文は動作していない。
JavaScriptでcatchの中で例外発生した場合
↓調査した際のプログラム↓
unction test() {
try {
try {
throw 'error'
}catch(e){
console.log('catch');
throw 'catch error'
}finally{
console.log('finally');
}
}catch(e){
return 'catch error2'
}
}
console.log(test());↓出力結果↓
catch finally catch error2
catchのあとにfinallyが実行されていることが分かる。同時にcatchに投げ、例外も発生している。
PHP
PHPでcatchの中でreturnした場合
↓調査した際のプログラム↓
<?php
try {
throw new Exception('error');
} catch(Exception $error) {
print "catch\n";
return;
} finally {
print "finally\n";
return;
}↓出力結果↓
catch finally
catchのあとにfinallyが実行されていることが分かる
→JavaScript同様、catch内のreturn文は動作していない。
PHPでcatchの中で例外発生した場合
↓調査した際のプログラム↓
<?php
try {
try {
throw new Exception('error');
} catch(Exception $error) {
print "catch\n";
throw $error;
} finally {
print "finally\n";
}
} catch(Exception $error) {
print "catch2\n";
}↓出力結果↓
catch finally catch2
JavaScriptと同様にcatchのあとにfinallyが実行されていることが分かる。同時にcatchに投げ、例外も発生している。

