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
。然后它将再次调用相同的方法,但这一次,只有剩余的网址将再次被验证。
这是一种正确有效的方法吗?
我在这里使用了try catch
,因为有时我会在curl
上收到get_meta_tags
个错误,我只想跳过那些有错误的网址并继续使用该流程。
答案 0 :(得分:2)
正如我在评论中建议的那样,你可以在循环中进行错误检查,然后跳过任何不好的错误。这允许你摆脱$blockUrl
数组,除非你在其他地方需要它。
public function doSomething($urls) {
$meta = array();
foreach ($urls as $key => $url) {
try {
$result = get_meta_tags($url);
$meta[$url] = $result;
} catch (Exception $e) {
continue;
}
}
return $meta;
}
答案 1 :(得分:1)
将try/catch
放入循环中:
public function doSomething($urls) {
$meta = [];
foreach ($urls as $url) {
try {
$meta[$url] = get_meta_tags($url);
} catch (Exception $e) {
//
}
}
return $meta;
}
不要忘记初始化$meta
数组,否则在尝试返回未定义的变量时可能会遇到错误。