少し前に、「FOR PHP」運動の活動家の1人であるNikita Popovが彼のtwitterメッセージに投稿しました。
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);
新しいコンストラクトを使用する際の注意点は、
try / catchブロックで
returnコンストラクトを使用することです。この場合、
finallyブロックが呼び出されます。
<?php try { return 2; } finally { echo " \n"; }
結果は次のようになります。
//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.phpthttps://github.com/laruence/php-src/blob/finally/Zend/tests/catch_finally_002.phpthttps://github.com/laruence/php-src/blob/finally/Zend/tests/catch_finally_003.phpthttps://github.com/laruence/php-src/blob/finally/Zend/tests/catch_finally_004.phpthttps://github.com/laruence/php-src/blob/finally/Zend/tests/catch_finally_005.phpthttps://github.com/laruence/php-src/blob/finally/Zend/tests/catch_finally_006.phpthttps://github.com/laruence/php-src/blob/finally/Zend/tests/try_finally_001.phpthttps://github.com/laruence/php-src/blob/finally/Zend/tests/try_finally_002.phpthttps://github.com/laruence/php-src/blob/finally/Zend/tests/try_finally_003.phpt