Неужели менее эффективно помещать блок try-catch внутри цикла, а не обертывать цикл с помощью try-catch в php, если предполагается, что цикл завершится, если произойдет исключение? Или нет никакой разницы?
РЕДАКТИРОВАТЬ:
т.е.
foreach (/*...*/) { //... try { //... } catch (/*...*/) { break; } //... }
против:
try { foreach (/*...*/) { //... } }
Это полностью зависит от характера неудачи и того, что вы намерены делать в catch
.
Но я бы обобщил его так
Исключения, попавшие внутрь цикла, не разглашают цикл
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? Безопасно ли продолжать цикл через вашу тему, если было выбрано исключение?
Конечно, есть разница, наиболее очевидным способом в первом случае вы будете только проверять наличие ошибок перед входом в цикл, если в цикле нет исключающих метателей, оставьте его таким образом. С другой стороны, вы будете проверять его на каждой итерации, которая вам понадобится, если у вас есть предложения или методы … у которых могут быть исключения.
Я не знаю, хорошо ли я объясню, дайте мне знать, если вы поймете