PHP 5.5では、最後に表示される場合があります

少し前に、「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);//    ,       } 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



All Articles