Come sviluppatore PHP, puoi usare le eccezioni, perché ti permettono di notare quando qualcosa è andato storto o l'utente ha agito in modo insolito (come la divisione per zero). Senza eccezioni, la tua applicazione finirà per presentare errori indesiderati e sarà molto più difficile eseguire il debug. È anche importante interrompere immediatamente l'esecuzione e prendere un'altra linea di condotta.
Le eccezioni sono davvero semplici e renderanno più facile il tuo sviluppo. Quando impari a usare le eccezioni, questa sarà una parte normale del tuo sviluppo.
Penso che la migliore definizione di eccezioni sia data da Martin Fowler:
Le eccezioni segnalano qualcosa al di fuori dei limiti previsti di comportamento del codice in questione.
Esattamente, infatti, un'eccezione è un evento, che si verifica durante l'esecuzione di un programma, che interrompe il normale flusso delle istruzioni del programma. Quando tu gettare
(creare un oggetto di eccezione e consegnarlo al sistema di runtime) un'eccezione, il sistema lo farà catturare
cercando l'handler appropriato e restituendo il messaggio corretto.
prova // il codice va qui catch (Exception $ e) // se si è verificata un'eccezione nel blocco try sopra
Usa le eccezioni quando il tuo sistema si trova di fronte a circostanze eccezionali che impediscono al sistema di prendere il sopravvento. Usiamo le eccezioni solo quando il sistema non è in grado di determinare cosa è successo. Martin Fowler crede che "se un errore è un comportamento previsto, non si dovrebbero usare eccezioni". Ciò significa che dovresti usare le eccezioni dove non sei in grado di determinare l'errore. Le eccezioni dovrebbero essere utilizzate solo in circostanze eccezionali.
Nota: le eccezioni non sono buone per la gestione delle operazioni logiche.
Per un sistema come la convalida dell'input, l'utilizzo di eccezioni è sbagliato. Prima di tutto, verrà determinato il testo di input e in un'applicazione come questa dovremmo segnalare una raccolta di errori anziché un singolo errore. Credo nell'eliminazione dell'uso delle eccezioni in qualsiasi circostanza in cui potremmo aspettarci fallimenti di validazione.
Catturare un'eccezione è molto importante, perché se non si rileva un'eccezione il sistema restituirà un errore. L'operazione di cattura deve essere il più vicino possibile al punto di errore.
Laravel usa gestore di eccezioni, che è una classe in App \ Eccezioni \ Handler.php
. Questa classe contiene due metodi principali (il renderHttpException
Il metodo, che è usato per tutte le eccezioni HTTP, come 404 e 503, è nella classe genitore di Handler). Il primo è rapporto
, che viene utilizzato per registrare eccezioni o inviarle a un servizio esterno. Ecco un esempio del metodo del rapporto:
report di funzione pubblica (Exception $ e) if ($ e instanceof CustomException) // restituisce parent :: report ($ e);
Il secondo è rendere
. Il metodo render è responsabile della conversione di una determinata eccezione in una risposta HTTP che deve essere inviata nuovamente al browser. Ecco un esempio del metodo di rendering:
render public function ($ request, Exception $ e) if ($ e instanceof CustomException) return response () -> view ('errors.custom', [], 500); return parent :: render ($ request, $ e);
Nota: puoi usare il $ dontReport
proprietà del gestore di eccezioni per ignorare le eccezioni per tipo.
Puoi eseguire l'override dei metodi di eccezione di Laravel nella tua eccezione in questo modo:
render public function ($ request, Exception $ e) if (config ('app.debug')) return parent :: render ($ request, $ e); return $ this-> handle ($ request, $ e);
Questo renderà quando config debug è vero.
Potrebbe essere necessario creare una propria classe di eccezioni. È necessario estendere dalla classe Exception di Laravel-ho creato una classe astratta che si comporterà come classe base della nostra classe Exception personalizzata. Crea un file in App / Eccezioni / monException.php
:
App namespace \ Eccezioni; utilizzare Eccezione; la classe astratta monException estende l'eccezione protected $ id; dettagli $ protetti; funzione pubblica __construct ($ message) parent :: __ construct ($ message); funzione protetta create (array $ args) $ this-> id = array_shift ($ args); $ error = $ this-> errors ($ this-> id); $ this-> details = vsprintf ($ error ['context'], $ args); restituire $ this-> dettagli; errori di funzione privata ($ id) $ data = ['not_found' => ['context' => 'La risorsa richiesta non può essere trovata ma potrebbe essere nuovamente disponibile in futuro. Sono consentite richieste successive da parte del cliente. ',] // ...]; restituire $ dati [$ id];
E la tua classe Exception:
App namespace \ Eccezioni; class NotFoundmonException estende monException public function __construct () $ message = $ this-> create (func_get_args ()); parent :: __ construct ($ messaggio);
Puoi usare la classe sopra nel tuo codice:
prova lancio di nuove \ App \ Exceptions \ NotFoundmonException ('not_found'); catch (\ App \ Exceptions \ NotFoundmonException $ e) return $ e-> getMessage ();
Oltre alla classe Exception principale di Laravel, è possibile utilizzare il pacchetto Assertion. Questo può essere usato come classe di eccezione di terze parti; puoi usarlo per saltare gli spaghetti Se
blocchi nel tuo codice.
Per installare il pacchetto Assertion, devi eseguire il seguente comando:
il compositore richiede beberlei / assert
Ad esempio, se vuoi controllare l'indirizzo email di un utente, puoi farlo:
usa Assert \ Assertion; utilizzare Assert \ AssertionFailedException; // ... try Assertion :: email ($ value, "Il valore deve essere valido indirizzo E-mail"); catch (AssertionFailedException $ e) $ e-> getValue (); // il valore che ha causato l'errore $ e-> getConstraints (); // i vincoli aggiuntivi dell'asserzione.
Indipendentemente dal linguaggio che si sceglie di utilizzare, le eccezioni sono molto importanti da comprendere in quanto ci aiutano a controllare l'esecuzione del flusso di un'applicazione.
Inoltre, ci aiutano a registrare i problemi quando si verificano e aiutano a rendere più robusta la nostra applicazione.
Come potete vedere dal lavoro trattato in questo tutorial, Laravel è un framework che offre grandi funzionalità di gestione delle eccezioni di web building per le applicazioni web.