例外 | さゆフィクション http://it.kensan.net/it aws wordpress などなどゆるーく書いてます Sat, 22 Apr 2023 01:53:43 +0000 ja hourly 1 https://wordpress.org/?v=6.5.2 https://it.kensan.net/wp-content/uploads/2023/03/cropped-icon-32x32.png 例外 | さゆフィクション http://it.kensan.net/it 32 32 try-catch-finallyの挙動を調べてみる(JavaScript、PHP) https://it.kensan.net/try-catch-finally%e3%81%ae%e6%8c%99%e5%8b%95%e3%82%92%e8%aa%bf%e3%81%b9%e3%81%a6%e3%81%bf%e3%82%8bjavascript%e3%80%81php.html Sat, 28 Mar 2020 05:18:11 +0000 https://verdy-it.xyz/itblog/?p=118 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に投げ、例外も発生している。

]]>