Why this matters
Improves resilience and observability of partial failures.
Wrap per-item work in try/catch, collect failures, and continue when appropriate; never let one failure abort the entire batch by default.
Improves resilience and observability of partial failures.
Side-by-side examples engineers can pattern-match during review.
foreach ($items as $i) { process($i); } // first exception stops the loop$errors=[]; foreach ($items as $i) {
try { process($i); } catch (Throwable $e) {
$errors[] = ['item'=>$i,'error'=>$e->getMessage()];
// optionally continue
}
}
if ($errors) { $logger->error('batch errors', ['errors'=>$errors]); }foreach($xs as $x){ process($x); }try{ process($x) }catch(Throwable $e){ /* log */ }From the same buckets as this rule.
Check if loops use equality operators (== or !=) in termination conditions. These can lead to infinite loops if the condition is never met exactly. Instead, use relational operators like < or > for safer loop termination.