可以尝试使用这种方式来处理异常吗?

时间:2016-05-04 21:22:50

标签: php laravel exception exception-handling try-catch

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个错误,我只想跳过那些有错误的网址并继续使用该流程。

2 个答案:

答案 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数组,否则在尝试返回未定义的变量时可能会遇到错误。