2016-05-04 87 views
0

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的元標記。然後,如果發生異常,則會拋出異常,導致該異常的URL將被放入數組$this->blockUrl。然後它會再次調用相同的方法,但是這次只有剩餘的url會被再次驗證。

這是一個正確和有效的方法來做這個邏輯?

我用try catch這裏,是因爲有時我上get_meta_tagscurl錯誤,我只是想跳過了這些錯誤這些網址,並將繼續流動。

+0

你試過了嗎? – RiggsFolly

+0

捲曲實際上是否拋出*例外* ...?!或者只是顯示錯誤/通知?後者不能被「抓住」。 – deceze

+1

@deceze - 在PHP 7中,您可以將其視爲「Throwable」。 –

回答

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

try/catch內循環:

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

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

    return $meta; 
} 

不要忘了初始化$meta陣列,否則你可能會得到一個errer當您嘗試返回一個未定義的變量。