try-catch-finallyの挙動を調べてみる(JavaScript、PHP)

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に投げ、例外も発生している。