【发布时间】:2016-05-04 21:22:49
【问题描述】:
Try catch是用来处理异常的,但也可以这样用吗?
private $blockUrl = [];
public function doSomething($urls) {
try {
foreach ($urls as $key => $url) {
if (in_array($url, $this->blockUrl)) continue;
$meta[$url] = get_meta_tags($url);
unset($urls[$key]);
}
} catch (Exception $e) {
$this->blockUrl[] = $url;
return $this->doSomething($urls);
}
return $meta;
}
所以基本上它的作用是获取传递给方法的 url 的元标记。然后如果get_meta_tags 发生异常,则会抛出异常,并且导致异常的url 将被放入数组$this->blockUrl。然后它会再次调用相同的方法,但这一次,只会再次验证剩余的 url。
这是执行此逻辑的正确有效方法吗?
我在这里使用了try catch,因为有时我在get_meta_tags 上收到curl 错误,我只想跳过那些有这些错误的网址并继续流程。
【问题讨论】:
-
curl 是否真的会抛出 exception...?!或者只是显示错误/通知?后者不能是
caught。 -
@deceze - 在 PHP 7 中,您可以将其捕获为
Throwable。 -
是的,它有效,我想知道这是否是一种好的做法,或者是否有更好的方法来处理这个问题。
-
将 try/catch 放入 foreach 循环中,然后将 continue 放入 catch 中怎么样?
标签: php laravel exception exception-handling try-catch