PHP 5.5が「最終的に 」t.co/Dy93CZaRを持つように見えます
(オリジナルはこちらtwitter.com/nikita_ppv/status/232930291625369600 )
次に、無料翻訳:
提出
RFCのこのリリースでは、例外での新しいキーワード「 finally 」のサポートを紹介しようとします。
この機能がないと、開発者はしばしばフォームの構造を記述する必要があります。
<?php $db = mysqli_connect(); try { call_some_function($db); } catch (Exception $e) { mysqli_close($db); throw $e; } mysql_close($db);
finallyの導入により、より少ないコードを記述する必要があると言っているのではなく、 try / catchコンストラクトをより詳細に制御できると言っています。
申し出
try / catchブロックが完了すると 、 finallyブロックが常に実行されます。
これは、例外がスローされた場合でも、 finallyブロックが実行されることを意味します。 ただし、実際には最終的には単純な例外処理よりも便利です。 プログラマーは、例外処理時またはキャッチされなかった場合に、メモリや接続をクリーニングするための不要な構造を回避できます。
<?php $db = mysqli_connect(); try { call_some_function($db);// , } finally { mysqli_close($db); }
新しいコンストラクトを使用する際の注意点は、 try / catchブロックでreturnコンストラクトを使用することです。この場合、 finallyブロックが呼び出されます。
<?php try { return 2; } finally { echo " \n"; } // echo " ";
結果は次のようになります。
//return int(2)
さて、ネストしたtry / catch / finallyコンストラクトの場合 :
<?php function foo ($a) { try { echo "1"; try { echo "2"; throw new Exception("ex"); } catch (Exception $e) { echo "3"; } finally { echo "4"; throw new Exception("ex"); } } catch (Exception $e) { echo "3"; } finally { echo "2"; } return 1; } var_dump(foo("para"));
私達は得る:
123432int(1)
テストと例
多くの例とケースもあり、さらに覗くことができます
https://github.com/laruence/php-src/blob/finally/Zend/tests/catch_finally_001.phpt
https://github.com/laruence/php-src/blob/finally/Zend/tests/catch_finally_002.phpt
https://github.com/laruence/php-src/blob/finally/Zend/tests/catch_finally_003.phpt
https://github.com/laruence/php-src/blob/finally/Zend/tests/catch_finally_004.phpt
https://github.com/laruence/php-src/blob/finally/Zend/tests/catch_finally_005.phpt
https://github.com/laruence/php-src/blob/finally/Zend/tests/catch_finally_006.phpt
https://github.com/laruence/php-src/blob/finally/Zend/tests/try_finally_001.phpt
https://github.com/laruence/php-src/blob/finally/Zend/tests/try_finally_002.phpt
https://github.com/laruence/php-src/blob/finally/Zend/tests/try_finally_003.phpt