try-finally
4 июня 2018
Try без catch может быть полезным, если ошибку мы ловить именно в этом методе не хотим, но завершение нам нужно как-то обработать вне зависимости, была ошибка или нет.
$this->openConnection();
try {
$this->doSomethingUnstable();
} finally {
$this->closeConnection();
}Почему-то подобный код я не особо часто встречал, хотя catch без обработки — постоянно.



Комментарии RSS по email OK
В PHP не сильно принято освобождать ресурсы. Видимо расчет на GC и жизненный цикл процесса на время обработки реквеста. Я в прошлом программил на Delphi, и там это был очень распространенный кейс. В интерпретации PHP:
// Создать объект try { // Что-то с ним сделать } finally { // Убить объект }Да, в php нет большой необходимости так как он создан, чтобы умирать.
Необходимость есть, и в некоторых случаях это очень удобно. Поставить/снять блокировку, создать/удалить временный файл, и прочее.
Ну как бы я написал "нет БОЛЬШОЙ необходимости" Ваши случаи можно решить разными способами, к примеру destructor или явно вызвать метод.
Причем тут деструктор? Речь про блоки кода, где нужно гарантировать финализацию. До 5.5, где появился finally, подобные вещи приходилось костылить другими способами, типа:
// 1. Initialization try { // 2. Exception can be thrown } catch (Exception $e) { // 3. Finalization throw $e; } // 3. FinalizationНо с finally это выглядит лучше:
// 1. Initialization try { // 2. Exception can be thrown } finally { // 3. Finalization }Сам сейчас прочел свое сообщение и понял что ступил, видимо недосып сыграл. Да, вы правы