PHP try catch块内循环

PHP try catch块内循环,php,performance,try-catch,Php,Performance,Try Catch,如果打算在发生异常时结束循环,那么在循环中放置try-catch块是否比在php中使用try-catch包装循环效率低?还是根本没有区别 编辑: i、 e 与: try { foreach (/*...*/) { //... } } 很可能没有区别。在PHP这样的解释语言中,这种级别的优化通常没有任何意义 在大多数情况下,您的逻辑将要求您将块放入循环中。否则,即使发生错误,循环仍将继续。这完全取决于您如何使用try-catch?如果抛出异常,继续循环主题是否安全

如果打算在发生异常时结束循环,那么在循环中放置try-catch块是否比在php中使用try-catch包装循环效率低?还是根本没有区别

编辑:

i、 e

与:

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

很可能没有区别。在PHP这样的解释语言中,这种级别的优化通常没有任何意义


在大多数情况下,您的逻辑将要求您将块放入循环中。否则,即使发生错误,循环仍将继续。

这完全取决于您如何使用try-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;
}
而那些被圈外抓到的人

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";
}

当然,这是有区别的,最明显的是,在第一种情况下,您只会在进入循环之前检查错误,如果循环没有异常抛出器,请保持这种方式。另一方面,你将在每次迭代中检查它,如果你有句子或方法,你将需要它。。。威奇也有例外


我不知道我是否解释得很好,请告诉我您是否理解

如果发生异常,循环将中断。如果捕获到异常,则不会。我将添加一个示例我的意思是,如果捕获到异常,循环将被中断:
foreach(…){try{…}catch(…){break;}}
如果要在异常时中断循环,请放置
try。。捕捉循环外的
。很好的示例,谢谢!您可能会感到惊讶,但有时编写代码是为了明智,而不是为了“更高效”的废话。很明智。使一个任务指定给它。在一个循环内有一个try-catch块而不是在循环外的性能损失是否与($i=0;$i的性能损失大致相同
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