Ho studiato l'uso delle eccezioni in vari progetti di php (come Doctrine e Zend Framework). Le eccezioni sembrano essere generate quando si verifica uno stato / input non valido. Un esempio perfetto è Doctrine che genera un'eccezione quando si tenta di utilizzare una stringa di query non valida.
Penso che i creatori della dottrina api abbiano capito che, per prima cosa, non è possibile interrogare i dati usando un'istruzione DQL non valida e uno sviluppatore dovrebbe essere immediatamente avvisato che si è verificato un errore, piuttosto che lasciare che l'esecuzione continui con la possibilità di un codice di errore non controllato. Scommetto anche che questo semplifica la lettura del codice. Non riesco a pensare a una situazione in cui si desideri utilizzare una dichiarazione DQL non valida, ad eccezione del test delle unità. Poiché questo è vero, è meglio evitare di affliggere un gruppo di codice con controlli null / errori e utilizzare le eccezioni.
Ho letto nei libri che le eccezioni non dovrebbero essere generate quando si convalida l'input dell'utente di appuntamenti. Ho visto esempi su dove si è rotta la linea guida. Un esempio è il framework Zend. Se si fornisce un controller o un nome di azione non valido, viene generata un'eccezione. A differenza della dottrina, l'utente ha un controllo più diretto su questo tipo di input. So che puoi configurare un controller degli errori e impostare un messaggio 404 o cosa hai, ma sono curioso del motivo per cui hanno usato un'eccezione in questo scenario? Suppongo che tu possa sostenere che Zend Framework non sa come continuare ad elaborare la richiesta.
Un ultimo esempio Ho scritto una funzione per restituire un codice HTML basato su un determinato tipo di risorsa. Questo tipo di risorsa è codificato e inviato quando un utente interagisce con un sito Web (ad esempio facendo clic su un pulsante per visualizzare il modulo per immettere dati). Non mi aspetto che gli utenti debbano andare in giro con il tipo di richiesta. In condizioni operative normali, il tipo di risorsa dovrebbe essere valido. Per ripulire la logica, avrei lanciato un'eccezione se non fosse stato trovato un particolare modulo. Questo è principalmente per trovare la forma corretta associata a un tipo di risorsa, in modo che possa avvenire una corretta convalida. Questo suona come un caso d'uso valido per un'eccezione? Al momento è piuttosto banale, ma ho intenzione di implementare un consumatore riposante e riutilizzare una funzione per mappare le risorse ai loro servizi di validazione sarebbe molto utile. Posso quindi rilevare l'eccezione e in base al consumatore, restituire un messaggio di errore adatto al tipo di richiesta ...