Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php try-catch可以用这种方式处理异常吗?_Php_Laravel_Exception_Exception Handling_Try Catch - Fatal编程技术网

Php try-catch可以用这种方式处理异常吗?

Php try-catch可以用这种方式处理异常吗?,php,laravel,exception,exception-handling,try-catch,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($u

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\u meta\u标记上发生异常,将抛出异常,并将导致异常的url放入数组
$this->blockUrl
。然后,它将再次调用相同的方法,但这次只会再次验证剩余的URL

这是一种正确而有效的方法吗


我在这里使用了
try-catch
,因为有时候我会在
get\u-meta\u标签上出现
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
数组,否则在尝试返回未定义的变量时可能会出错。

try/catch
放入循环中:

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

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

    return $meta;
}

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

正如我在评论中所建议的,您可以在循环内执行错误检查,只需跳过任何不好的变量即可。这允许您摆脱
$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;
}

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

curl是否真的抛出异常。。。?!或者只是显示一个错误/通知?后者不能被
捕获
@deceze-在PHP7中,您可以将其捕获为
Throwable
。是的,它是有效的,我想知道这是一个好的做法还是有更好的方法来处理这个问题。将您的try/catch放在foreach循环中,然后将continue放在catch中如何?curl是否真的抛出异常。。。?!或者只是显示一个错误/通知?后者不能被
捕获
@deceze-在PHP7中,您可以将其捕获为
可丢弃的
。是的,它可以工作,我想知道这是一个好的做法还是有更好的方法来处理这个问题。将您的try/catch放在foreach循环中,然后将continue放在catch中如何?