Il miglior metodo in PHP per la gestione degli errori? Converti tutti gli errori PHP (avvisi di avviso, ecc.) Alle eccezioni?

7

Qual è il miglior metodo in PHP per la gestione degli errori?

c'è un modo in PHP per convertire tutti gli errori PHP (avvisi di avviso, ecc.) in eccezioni?

quale è il modo migliore / pratica per gestire gli errori?

di nuovo:

se esageriamo con le eccezioni (ad es. try / catch) in molte situazioni, penso che l'applicazione non sarà più necessaria.

per un semplice controllo degli errori possiamo usare return false; ma potrebbe essere ingombrante la codifica con molte altre condizioni.

cosa suggerisci?

    
posta user1179459 02.10.2012 - 09:12
fonte

3 risposte

4

Se gli ambienti di sviluppo e produzione sono separati, dovresti avere l'impostazione display_errors ini impostata su off sulla produzione e on (e vorrei impostare il error_reporting level su -1 : tutti gli errori ) sullo sviluppo. Non dovrebbe essere troppo difficile scrivere codice che non emetta alcun avviso o avviso attraverso l'uso normale a meno che non si stia utilizzando una libreria PEAR, in quanto hanno un sacco di codice legacy che causa avvisi.

Per quanto riguarda gli errori e le eccezioni, in fase di sviluppo dovresti trattarli normalmente in modo che tu possa effettivamente vedere cosa c'è che non va, e in produzione puoi usare set_error_handler e set_exception_handler metodi per rilevare errori ed eccezioni e visualizzare invece una pagina di errore per l'utente e scrivere l'errore effettivo in un file di registro che puoi controllare in seguito.

Oltre a questo, non userei alcuna tattica speciale per la soppressione degli errori.

    
risposta data 02.10.2012 - 11:22
fonte
3

Quando sviluppi il tuo codice dovresti avere tutti i segnalazioni di errori in PHP abilitati, comprese le notifiche e gli avvertimenti. Il tuo codice di produzione non dovrebbe mai produrre un errore PHP. In alcuni casi speciali potresti sopravvivere con alcuni Avvisi e Avvisi PHP, ma sul tuo server di produzione dovresti mostrare gli Errori all'utente.

Successivamente, Errori PHP significano che hai qualcosa di veramente incasinato nel tuo codice e tali cose non dovrebbero mai raggiungere la produzione. Qualsiasi quantità di test automatici decenti farà in modo che ciò non accada mai. = > Correzione per chiarezza: "... farà in modo che ciò accada raramente."

Non ti consiglio di trasformare errori, avvisi e avvisi PHP in eccezioni o "FALSE". Mai! Se si verificano sul tuo computer l'applicazione ha un problema serio, quindi non trasformare l'errore in qualcosa che puoi catturare e poi dimenticare / ignorare facilmente.

Quando si verificano situazioni in cui il codice può andare storto, utilizzare la verifica corretta e generare eccezioni. Ancor più, quando possibile, crea la tua eccezione e lancia quella più appropriata per quella situazione.

Ad esempio, invece di lasciare che PHP lanci un "Indice non valido" quando provi a leggere un elemento di un array, puoi fare qualcosa del tipo:

if (!isset($superWeapons['nuclear'])) 
  throw new MissingSuperweaponException('We heave no nuclear weapons awailable!');

Than, da qualche parte a un livello più alto della tua applicazione puoi catturare tutte queste eccezioni e mostrare all'utente i bei messaggi che vuoi.

Si prega di notare che le eccezioni sono per casi eccezionali, per situazioni in cui la vostra applicazione non dovrebbe mai essere. Utilizzare quindi solo quando necessario.

Quando c'è un risultato di un'operazione, un risultato che può essere VERO o FALSO o un valore o una stringa, non è un caso eccezionale, cioè un risultato o un valore di ritorno. Ad esempio, quando si esegue una ricerca per una stringa, il risultato può essere l'indice del testo cercato. Tuttavia, non trovando il testo non è un caso eccezionale, dovresti semplicemente restituire zero o falso, non un'eccezione.

    
risposta data 02.10.2012 - 11:16
fonte
0

Risposta breve: se utilizzi PHP 5, puoi gestire l'errore con le eccezioni:

link

In questo modo è più pulito del messaggio di eccezioni impostato manualmente, perché hai accesso a un sistema try catch e puoi isolare la gestione delle eccezioni

    
risposta data 02.10.2012 - 13:53
fonte

Leggi altre domande sui tag