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 .
Как вы можете видеть в коде, он работает так, как ожидалось. Документация на самом деле ошибочна.