2016-05-04 12 views
0

Try catchは例外を処理するために使用されますが、この方法でも使用できますか?このように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に入れられます。次に、同じメソッドをもう一度呼び出しますが、今回は残りのURLのみが再度検証されます。

これは、このロジックを実行するための正確かつ効率的な方法ですか?

ため、私は時々私はget_meta_tagscurlエラーを取得し、私はこれらのエラーを持っているそれらのURLをスキップして流れを継続したいのここtry catchを使用。

+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; 
} 

あなたは未定義の変数を返すようにしようとすると、そうでない場合は、あなたがerrerを得るかもしれない、$meta配列を初期化することを忘れないでください。

関連する問題