use*_*450 11 php performance try-catch
将try-catch块放在循环中是否效率较低,而不是在php中使用try-catch包装循环,如果发生异常,循环将结束?或者基本上没有区别?
编辑:
即
foreach (/*...*/) {
//...
try {
//...
} catch (/*...*/) {
break;
}
//...
}
Run Code Online (Sandbox Code Playgroud)
与:
try {
foreach (/*...*/) {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*ley 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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
Exception at 3
4
5
Exception at 6
7
8
Exception at 9
Run Code Online (Sandbox Code Playgroud)
而那些在循环之外被捕的人呢
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";
}
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
Exception at 3
Run Code Online (Sandbox Code Playgroud)