php 抛出异常继续执行,PHP:捕获exception并继续执行,这可能吗?

当然,只要赶上你想继续执行的例外…

try { SomeOperation(); } catch (SomeException $e) { // do nothing... php will ignore and continue }

当然,这有一个沉默地放弃可能是一个非常重要的错误的问题。 SomeOperation()可能会失败导致其他细微的,很难找出问题,但你永远不会知道你是否默默地放弃exception。

是的,但这取决于你想要执行什么:

例如

try { a(); b(); } catch(Exception $e){ } c();

c()将一直执行。 但是如果a()抛出exception, b() 不会被执行。

只把东西放到相互依赖的try块中。 例如b取决于某个结果,在try-catch块之后放置b是没有意义的。

当然:

try { throw new Exception('Something bad'); } catch (Exception $e) { // Do nothing }

您可能想要阅读有关例外情况的PHP文档。

是。

try { Somecode(); catch (Exception $e) { // handle or ignore exception here. }

但是请注意,PHP也有错误代码从exception分开,遗留之前从PHP有原始的oop。 大多数库buildin仍然会引发错误代码,而不是例外。 要忽略错误代码,请调用带有@前缀的函数:

@myfunction();

另一个angular度是从处理代码返回一个exception,而不是抛出一个。

我需要用我正在编写的模板框架来做到这一点。 如果用户试图访问数据中不存在的属性,我将在处理函数中从深处返回错误,而不是抛出它。

然后,在调用代码中,我可以决定是否抛出这个返回的错误,导致try()catch(),或者只是继续:

// process the template try { // this function will pass back a value, or a TemplateExecption if invalid $result = $this->process($value); // if the result is an error, choose what to do with it if($result instanceof TemplateExecption) { if(DEBUGGING == TRUE) { throw($result); // throw the original error } else { $result = NULL; // ignore the error } } } // catch TemplateExceptions catch(TemplateException $e) { // handle template exceptions } // catch normal PHP Exceptions catch(Exception $e) { // handle normal exceptions } // if we get here, $result was valid, or ignored return $result;

这样做的结果是我仍然得到原始错误的上下文,即使它被抛在最上面。

另一个select可能是返回一个自定义的NullObject或一个UnknownProperty对象,并在决定跳过catch()之前与之进行比较,但是因为您可以重新抛出错误,而且如果您完全控制整体结构,认为这是一个干净利落的问题,不能继续尝试/捕捉。

一个古老的问题,但是当我从过去的VBA scipt到PHP,在那里你可以让我们“去”重新进入一个循环“错误”与“简历”,离开它仍然处理function。

在php中,经过一些试验和错误之后,我现在使用嵌套try {} catch {}来处理关键和非关键stream程,甚至是相互依赖的类调用,这样我就可以追溯到错误的开始。 例如,如果函数b依赖于函数a,但函数c是一个很好的但不应该停止的过程,我仍然想知道所有3的结果无论如何,这是我做的:

//set up array to capture output of all 3 functions $resultArr = array(array(), array(), array()); // Loop through the primary array and run the functions foreach($x as $key => $val) { try { $resultArr[$key][0][] = a($key); $resultArr[$key][1][] = b($val); try { // If successful, output of c() is captured $resultArr[$key][2][] = c($key, $val); } catch(Exception $ex) { // If an error, capture why c() failed $resultArr[$key][2][] = $ex->getMessage(); } } catch(Exception $ex) { // If critical functions a() or b() fail, we catch the reason why $criticalError = $ex->getMessage(); } }

现在我可以遍历每个键的结果数组并评估结果。 如果()或b()存在严重故障。

在$ resultArr发生严重故障之前,我还有一个参考点,如果exception处理程序设置正确,我知道是否是()或b()失败。

如果c()失败,循环继续。 如果c()在各个点失败了,再加上一些额外的后循环逻辑,我甚至可以通过询问$ resultArr [$ key] [2]来查明c()是否工作或每次迭代都有错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值