Как ключевое слово «наконец» должно использоваться в PHP?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как ключевое слово «наконец» должно использоваться в PHP?

Сообщение Anonymous »

Итак, сегодня я читал об исключениях в онлайн-руководстве по PHP и понял, что мне еще предстоит понять цель или реальную необходимость ключевого словаfinally. Я прочитал здесь несколько сообщений, поэтому мой вопрос немного другой.
Я понимаю, что мы можем использовать, наконец, таким образом:

Код: Выделить всё

function hi() {
return 'Hi';
}

try {
throw new LogicException("Throw logic \n");
} catch (InvalidArgumentException $e) {
echo $e->getMessage();
}

echo hi();
выход:

Код: Выделить всё

> Fatal error: Uncaught LogicException: Throw Logic in C:\path\to\filename.php:167
Stack trace:
#0 {main}
thrown in C:\path\to\filename.php on line 167
Итак, в данном случае функция hi(); не выполняется и на это есть веская причина. Я понимаю, что если исключение не обработано,
интерпретатор PHP останавливает выполнение скрипта. хороший. Судя по тому, что я прочитал, наконец-то позволяет нам выполнить функцию hi();, даже если
исключение не обрабатывается (хотя я не знаю почему)
Итак, это я понимаю.

Код: Выделить всё

try {
throw new LogicException("Throw logic \n");
} catch (InvalidArgumentException $e) {
echo $e->getMessage();
} finally {
echo hi();
}
выход(ы):

Код: Выделить всё

> Hi
> Fatal error: Uncaught LogicException: Throw Logic in C:\path\to\filename.php:167
Stack trace:
#0 {main}
thrown in C:\path\to\filename.php on line 167
Это должно привести к ошибке исключения, а также к сообщению «привет» от функции, даже к тем, которые я не знаю для этого. Но чего я не понимаю, даже если мы перехватим LogicException с помощью catch (LogicException $e) и никаких исключений не будет создано, мы все равно увидим выполнение функции и увидим ' привет, сообщение. как в этом примере

Код: Выделить всё

try {
throw new LogicException("Throw logic \n");
} catch (LogicException $e) {
echo $e->getMessage();
} finally {
echo hi();
}
выход(ы):

Код: Выделить всё

> Throw logic
> Hi
Итак, мы по-прежнему видим выполнение функции hi(), хотя у нас нет исключений Uncaught. Почему и какая от этого польза?
Я думал, что блокfinally следует использовать в качестве крайней меры на случай, если исключения не будут перехвачены, даже если это не так, тогда зачем его запускать? это?

Подробнее здесь: https://stackoverflow.com/questions/416 ... sed-in-php
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»