рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ, рдирд┐рдХрд┐рддрд╛ рдкреЛрдкреЛрд╡, "рдлреЙрд░ рдкреАрдПрдЪрдкреА" рдЖрдВрджреЛрд▓рди рдХреЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рдЕрдкрдиреЗ рдЯреНрд╡рд┐рдЯрд░ рд╕рдВрджреЗрд╢ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛:
рдпрд╣ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреИрд╕реЗ 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);
рдирдП рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕реНрдкрд░реНрд╢реА рдмрд┐рдВрджреБ рдЯреНрд░рд╛рдЗ
/ рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ
рд░рд┐рдЯрд░реНрди рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ
рдЕрдВрдд рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЛ рдЕрднреА рднреА рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
<?php try { return 2; } finally { echo " \n"; }
рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:
//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.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