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 независимо от того, было ли выброшено исключение, и до возобновления нормального выполнения.

Формулировка предполагает, что от вас всегда ожидается блокировка улова, но, насколько я вижу, это не указано прямо.

2 ответа

Решение

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

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

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

Другие вопросы по тегам