Рассмотрим эти два примера
<?php function throw_exception() { // Arbitrary code here throw new Exception('Hello, Joe!'); } function some_code() { // Arbitrary code here } try { throw_exception(); } catch (Exception $e) { echo $e->getMessage(); } some_code(); // More arbitrary code ?>
а также
<?php function throw_exception() { // Arbitrary code here throw new Exception('Hello, Joe!'); } function some_code() { // Arbitrary code here } try { throw_exception(); } catch (Exception $e) { echo $e->getMessage(); } finally { some_code(); } // More arbitrary code ?>
Какая разница? Есть ли ситуация, когда первый пример не будет выполнять some_code()
, но второй будет? Я пропустил пункт целиком?
Если вы поймаете исключение (любое исключение), два примера кода эквивалентны. Но если вы обрабатываете только определенный тип исключения в своем блоке класса и возникает другой вид исключения, то some_code();
будет выполняться только в том случае, если у вас есть блок finally
.
try { throw_exception(); } catch (ExceptionTypeA $e) { echo $e->getMessage(); } some_code(); // Will not execute if throw_exception throws an ExceptionTypeB
но:
try { throw_exception(); } catch (ExceptionTypeA $e) { echo $e->getMessage(); } finally { some_code(); // Will be execute even if throw_exception throws an ExceptionTypeB }
http://www.youtube.com/watch?v=EWj60p8esD0
Смотреть с: 12:30 и далее
Посмотри это видео. Однако язык JAVA. Но я думаю, что это иллюстрирует Исключения и использование ключевого слова finally очень хорошо.
блок fianlly используется, когда вы хотите, чтобы часть кода выполнялась независимо от того, произошло ли исключение или нет …
Пример 2 на этой странице:
Руководство PHP