Intereting Posts
Каков наилучший способ уведомления пользователя после перенаправления правила access_control? Обрезаемая фатальная ошибка: объект класса __PHP_Incomplete_Class как я могу получить следующий и предыдущий идентификатор поля с php из mysql eregi_replace ("", '', $ data) – что делает эта строка? У PHP проблемы с сохранением больших файлов Переменная PHP, определенная в «родительском» файле, не распознанная в «обязательном» файле Как выполнить команду оболочки из скрипта php как получить innerhtml по имени или имени, используя php использование usort с ассоциативным массивом внутри контроллера symfony2 cakephp 2 – разбиение на страницы за пределами первой страницы не работает Как вызвать функцию PHP с помощью jQuery ajax? Регулярное выражение Получить адрес электронной почты с адреса электронной почты PHP SimpleXML: как использовать двоеточие в именах извлекать определенный текст из строки, используя php Захват пользовательского поля с помощью IP-адреса PayPal в PHP

Блок try-catch PHP внутри цикла

Неужели менее эффективно помещать блок try-catch внутри цикла, а не обертывать цикл с помощью try-catch в php, если предполагается, что цикл завершится, если произойдет исключение? Или нет никакой разницы?

РЕДАКТИРОВАТЬ:

т.е.

foreach (/*...*/) { //... try { //... } catch (/*...*/) { break; } //... } 

против:

 try { foreach (/*...*/) { //... } } 

Это полностью зависит от характера неудачи и того, что вы намерены делать в catch .

Но я бы обобщил его так

  • Если вы хотите, чтобы цикл вышел из Exception, заверните весь цикл
  • Если вы хотите, чтобы цикл продолжался, не делайте

РЕДАКТИРОВАТЬ

Исключения, попавшие внутрь цикла, не разглашают цикл

 for ($i = 1; $i < 10; $i++) { try { if ($i % 3 == 0) { throw new Exception('BOOM'); } echo $i; } catch (Exception $e) { echo "Exception at $i"; } echo PHP_EOL; } 

вывод:

 1 2 Exception at 3 4 5 Exception at 6 7 8 Exception at 9 

В то время как те, кто попадает за пределы цикла, делают

 try { for ($i = 1; $i < 10; $i++) { if ($i % 3 == 0) { throw new Exception('BOOM'); } echo $i, PHP_EOL; } } catch ( Exception $e ) { echo "Exception at $i"; } 

вывод:

 1 2 Exception at 3 

Скорее всего, нет никакой разницы. Оптимизация на этом уровне обычно не имеет никакого смысла в интерпретируемом языке, таком как PHP.

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

Это полностью зависит от того, как вы используете try-catch? Безопасно ли продолжать цикл через вашу тему, если было выбрано исключение?

Конечно, есть разница, наиболее очевидным способом в первом случае вы будете только проверять наличие ошибок перед входом в цикл, если в цикле нет исключающих метателей, оставьте его таким образом. С другой стороны, вы будете проверять его на каждой итерации, которая вам понадобится, если у вас есть предложения или методы … у которых могут быть исключения.

Я не знаю, хорошо ли я объясню, дайте мне знать, если вы поймете