PHP 5.5 и попробуйте … наконец

PHP 5.5 добавляет поддержку, finally в блоки try / catch.

Java позволяет вам создать блок try / catch / finally без блока catch, поэтому вы можете очищать локально, когда происходит исключение, но пусть это само распространение распространяется на стек вызовов, поэтому его можно обрабатывать отдельно.

 try { // Do something that might throw an exception here } finally { // Do cleanup and let the exception propagate } 

В текущих версиях PHP вы можете добиться чего-то, что может сделать очистку на исключении и позволить ему распространяться, но если не будет выбрано исключение, код очистки никогда не будет вызван.

 try { // Do something that might throw an exception here } catch (Exception $e) { // Do cleanup and rethrow throw $e; } 

Будет ли PHP 5.5 поддерживать стиль try / finally? Я искал информацию об этом, но самое близкое, что я мог найти к ответу, от PHP.net, подразумевает, что это не так.

В PHP 5.5 и более поздних версиях блок finally также может быть указан после блоков catch. Код в блоке finally всегда будет выполняться после блоков try и catch, независимо от того, было ли выбрано исключение, и до возобновления нормального выполнения.

В формулировке указывается, что вы всегда должны иметь блокирующий блок, но, насколько я понимаю, он не указывает это прямо.

Да, try/finally поддерживается ( RFC , код в реальном времени ). Документация действительно не очень ясна и должна быть изменена.

Я применил тестовый пример на сервере 5.5RC3 .

Как вы можете видеть в коде, он работает так, как ожидалось. Документация на самом деле ошибочна.