在try循环中放置try-catch块是否效率低,而不是在php中使用try-catch包装循环,如果发生异常,循环将结束?或者基本上没有区别?
编辑:
即,
foreach (/*...*/) {
//...
try {
//...
} catch (/*...*/) {
break;
}
//...
}
与
try {
foreach (/*...*/) {
//...
}
}
答案 0 :(得分:40)
这完全取决于失败的性质,以及您打算在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
答案 1 :(得分:2)
这完全取决于你如何使用try-catch?如果抛出异常,继续循环访问主题是否安全?
答案 2 :(得分:1)
很可能没有区别。这种级别的优化在PHP等解释性语言中通常没有任何意义。
在大多数情况下,您的逻辑将要求您无论如何都要将块放入循环中。否则,即使发生错误,循环也会继续。
答案 3 :(得分:0)
当然,有一个区别,最明显的方式是在第一种情况下,你只会在进入循环之前检查错误,如果循环没有异常抛出者,就这样离开。另一方面,你将在每次迭代中检查它,如果你有句子或方法,你将需要它...这可能有例外。
我不知道自己是否解释得很好,如果你理解,请告诉我