try catch可以这样使用来处理异常吗?

Can try catch be used this way to handle exceptions?

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 中。然后它会再次调用相同的方法,但这次只会再次验证剩余的 urls。

这是执行此逻辑的正确且有效的方法吗?

我在这里使用 try catch 是因为有时我在 get_meta_tags 上遇到 curl 错误,我只想跳过那些有这些错误的 url 并继续顺其自然。

try/catch 放入循环中:

public function doSomething($urls) {
    $meta = [];

    foreach ($urls as $url) {
        try {
            $meta[$url] = get_meta_tags($url);
        } catch (Exception $e) {
            //
        }
    }

    return $meta;
}

不要忘记初始化 $meta 数组,否则当您尝试 return 未定义的变量时可能会出错。

正如我在评论中建议的那样,您可以在循环内进行错误检查,并跳过任何错误的错误。这允许您摆脱 $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;
}