Blocco try-catch PHP all'interno del ciclo

È less efficiente inserire un block try-catch all'interno di un ciclo anziché avvolgere il ciclo con un try-catch in php se si intende che il ciclo terminerà se si verifica un'exception? O non c'è essenzialmente alcuna differenza?

MODIFICARE:

vale a dire,

foreach (/*...*/) { //... try { //... } catch (/*...*/) { break; } //... } 

contro:

 try { foreach (/*...*/) { //... } } 

Ciò dipende interamente dalla natura del fallimento e da ciò che intendi fare nella catch .

Ma lo generalizzerei in questo modo

  • Se si desidera che il ciclo esca su Eccezione, avvolgere l'integer ciclo
  • Se vuoi che il ciclo continui, non farlo

MODIFICARE

Le eccezioni catturate all'interno di un ciclo non interrompono implicitamente il ciclo

 for ($i = 1; $i < 10; $i++) { try { if ($i % 3 == 0) { throw new Exception('BOOM'); } echo $i; } catch (Exception $e) { echo "Exception at $i"; } echo PHP_EOL; } 

produzione:

 1 2 Exception at 3 4 5 Exception at 6 7 8 Exception at 9 

Mentre quelli catturati fuori dal giro fanno

 try { for ($i = 1; $i < 10; $i++) { if ($i % 3 == 0) { throw new Exception('BOOM'); } echo $i, PHP_EOL; } } catch ( Exception $e ) { echo "Exception at $i"; } 

produzione:

 1 2 Exception at 3 

Probabilmente non c'è differenza. L'ottimizzazione a questo livello di solito non ha alcun senso in un linguaggio interpretato come PHP.

Nella maggior parte dei casi, la tua logica richiederà comunque di inserire il block all'interno del ciclo. Altrimenti, il ciclo continuerà anche se si è verificato un errore.

Dipende interamente da come stai usando il try-catch? È sicuro continuare a scorrere il sobject se viene lanciata un'exception?

Certo, c'è una differenza, nel modo più ovvio nel primo caso controllerai gli errori prima di entrare nel ciclo, se il ciclo non ha lanciatori di eccezioni, lascia in questo modo. D'altra parte lo controllerai in each iterazione, di cui avrai bisogno se hai frasi o methods … che possono avere eccezioni.

Non so se mi spieghi bene, fammi sapere se capisci