Рассмотрим эти два примера
<?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