2016-05-04 2 views
0

Try catch wird für die Behandlung von Ausnahmen verwendet, aber könnte es auch so verwendet werden?Kann versuchen, auf diese Weise verwendet werden, um Ausnahmen zu behandeln?

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

Also im Grunde ist das, dass es die Metatags der URLs erhält, die an die Methode weitergegeben werden. Sollte dann eine Ausnahme auf dem get_meta_tags auftreten, wird eine Ausnahme ausgelöst und die URL, die die Ausnahme verursachte, wird in ein Array $this->blockUrl abgelegt. Dann wird dieselbe Methode erneut aufgerufen, aber diesmal werden nur die verbleibenden URLs erneut validiert.

Ist dies ein richtiger und effizienter Weg, um diese Logik zu machen?

benutzte ich try catch hier wegen manchmal ich curl Fehler auf dem get_meta_tags bekommen und ich will nur diese URLs überspringen, die diese Fehler und weiterhin mit der Strömung hat.

+0

Haben Sie es versucht? – RiggsFolly

+0

Ist Curl tatsächlich eine * Ausnahme * ...? Oder nur einen Fehler/Hinweis anzeigen? Letzteres kann nicht "gefangen" werden. – deceze

+1

@deceze - In PHP 7 können Sie es als 'Throwable' fangen. –

Antwort

2

Wie ich in meinem Kommentar vorgeschlagen habe, können Sie die Fehlerprüfung innerhalb der Schleife durchführen, und einfach alle schlechten überspringen. Dadurch können Sie das Array $blockUrl loswerden, sofern Sie es nicht anderweitig benötigen.

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

Setzen Sie die try/catch innerhalb der Schleife:

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

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

    return $meta; 
} 

nicht die $meta Array zu initialisieren Vergessen, sonst könnte man eine errer erhalten, wenn Sie versuchen, eine nicht definierte Variable zurückzukehren.

Verwandte Themen