2013-04-08 23 views
22

Vorrei essere in grado di lanciare un errore irreversibile fatale nella mia classe php quando un utente della mia classe lo abusa per qualcosa che non intendevo. Non voglio che lui/lei sia in grado di recuperare con una clausola di cattura. Conosco lo trigger_error, ma posso farlo solo emettere avvisi o notifiche.PHP: errore fatale di trigger?

+1

Perché preoccuparsi? Chiunque stia implementando la tua classe: 1. È un programmatore. 2. Ha accesso alla fonte. 3. Can e probabilmente cancellerà la chiamata 'trigger_error()'. – Sammitch

+1

@ Sammitch: voglio chiarire le mie intenzioni. Voglio permettere a chiunque usi il mio codice di sapere che quello che stanno facendo non è il modo in cui intendevo usarlo. A me lanciare un'eccezione invia il messaggio "ti occupi di questo comportamento indefinito". Voglio inviare il messaggio: "Non farlo in questo modo, fallo in questo modo". – DudeOnRock

+2

Librerie di esempio. Dove dovresti assolutamente NON fare qualcosa se qualche condizione non è vera. (Utile per le persone che non amano leggere le documentazioni: P) – bwoebi

risposta

39

E_USER_ERROR è la costante adatta.

trigger_error("Fatal error", E_USER_ERROR); 

Vedere anche il primo esempio della pagina di manuale.

+6

molto ironico che il ragazzo che ha detto "Utile per le persone che non amano leggere le documentazioni" non si è preso la briga di leggere il primo esempio della pagina di manuale. –

5
debug_print_backtrace(); 
trigger_error("As much information as you can provide, please", E_USER_ERROR); 
exit(); 

exit() termina interamente lo script PHP. Più informazioni puoi fornire agli utenti o agli sviluppatori sull'errore, meglio è. I codici di errore sono passé.

Modifica: l'uso di E_USER_ERROR dovrebbe terminare comunque lo script, quindi spostato debug_print_backtrace() prima di trigger_error().

+0

assolutamente, aggiungendo morire; o uscita; comando dopo il lancio di tale errore è solo il modo per essere sicuro quasi al 100%. L'unico modo per evitarlo (si aspettano le funzioni disabilitate php.ini) è [runkit_function_remove] (http://php.net/manual/en/function.runkit-function-remove.php) –

8

Nota: se si sta utilizzando un gestore di errore personalizzato (vedi set_error_handler) E_USER_ERROR volontà non fermare/uscita/die a meno che il gestore di errori restituisce false

poche parole: il vostro gestore di errore personalizzato determina in modo efficace se viene trattato E_USER_ERROR come fatale

+2

Molto vero. Come ho notato in un altro posto, puoi creare un errore fatale tramite: if ($ isTestMode == 1) { eval ("noSuchFunction();"); } Questo metodo funzionerà sempre. –

+0

Grazie Brad, questo mi ha davvero aiutato, sto usando la funzione personalizzata di gestione degli errori. Sebbene si trattasse di "gestire l'errore", ho attivato con il flag E_USER_ERROR che non causava un errore "fatale" fino a quando non ho restituito false dalla funzione di gestione degli errori. – dading84

Problemi correlati