PHP 5.5 рдореЗрдВ, рдЕрдВрдд рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ

рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ, рдирд┐рдХрд┐рддрд╛ рдкреЛрдкреЛрд╡, "рдлреЙрд░ рдкреАрдПрдЪрдкреА" рдЖрдВрджреЛрд▓рди рдХреЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рдЕрдкрдиреЗ рдЯреНрд╡рд┐рдЯрд░ рд╕рдВрджреЗрд╢ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛:

рдпрд╣ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреИрд╕реЗ PHP 5.5 рдореЗрдВ `рдЕрдВрддрддрдГ` t.co/Dy93CZaR рд╣реЛрдЧрд╛

(рдореВрд▓ рдпрд╣рд╛рдВ twitter.com/nikita_ppv/status/232930291625369600 )

рдЕрдЧрд▓рд╛, рдПрдХ рдореБрдлреНрдд рдЕрдиреБрд╡рд╛рдж:

рд╡рд┐рдЪрд╛рд░


RFC рдХреА рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ, рд╣рдо рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдореЗрдВ рдирдП рдХреАрд╡рд░реНрдб " рдЕрдВрддрддрдГ " рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд┐рдирд╛, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдХреНрд╕рд░ рдлреЙрд░реНрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ:
<?php $db = mysqli_connect(); try { call_some_function($db); } catch (Exception $e) { mysqli_close($db); throw $e; } mysql_close($db); 


рдЕрдВрдд рдореЗрдВ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде, рд╣рдо рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдХрдо рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рд╣рдо рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ "рдирд┐рдпрдВрддреНрд░рдг" рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдорд┐рд▓реЗрдЧрд╛

рдкреНрд░рд╕реНрддрд╛рд╡


рдЕрдВрддрддрдГ рдмреНрд▓реЙрдХ рд╣рдореЗрд╢рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрд╢рд┐рд╢ / рдХреИрдЪ рдмреНрд▓реЙрдХ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдВрдд рдореЗрдВ рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдВрдд рдореЗрдВ рд╕рд░рд▓ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИред рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЕрдкрд╡рд╛рдж рдХреА рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд╕рдордп рдпрд╛ рдпрджрд┐ рд╡реЗ рдкрдХрдбрд╝реЗ рдирд╣реАрдВ рдЧрдП рдереЗ, рддреЛ рд╕реНрдореГрддрд┐ рдФрд░ / рдпрд╛ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

 <?php $db = mysqli_connect(); try { call_some_function($db);//    ,       } finally { mysqli_close($db); } 

рдирдП рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕реНрдкрд░реНрд╢реА рдмрд┐рдВрджреБ рдЯреНрд░рд╛рдЗ / рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рд░рд┐рдЯрд░реНрди рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдВрдд рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЛ рдЕрднреА рднреА рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

 <?php try { return 2; } finally { echo "   \n"; } //    echo "    "; 

рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:


//return int(2)

рдЦреИрд░, рдиреЗрд╕реНрдЯреЗрдб рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝рдиреЗ / рдЕрдВрддрддрдГ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ:

 <?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

Source: https://habr.com/ru/post/In149314/


All Articles