set_error_handler e set_exception_handler non sono poi così simili

di Gianni Tomasicchio - 13 ottobre 2009

Nonostante programmo in PHP da molti anni, mi capita ancora di scoprire cose nuove sul linguaggio. L'ultima sorpresa è arrivata dalle funzioni set_error_handler e set_exception_handler.

Come forse saprete, con queste istruzioni è possibile indicare a PHP quali funzioni chiamare quando si verifica un errore oppure viene sollevata un'eccezione non gestita.  Sono molto simili nella sintassi ma il loro comportamento nasconde una sostanziale  differenza.

Come al solito, basterebbe leggere attentamente la documentazione ufficiale per rendersene conto. Nella pagina di set_error_handler si trova scritto che:

Also note that it is your responsibility to die() if necessary. If the error-handler function returns, script execution will continue with the next statement after the one that caused an error.

Mentre nella documentazione di set_exception_handler si legge:

Execution will stop after the exception_handler  is called.

Quindi, se si genera un errore nello script, viene richiamata automaticamente la funzione specificata da set_error_handler e poi il flusso del programma continua dall'istruzione successiva a quella che ha generato l'errore. Se invece viene sollevata una eccezione e questa non viene catturata da un blocco "catch", allora viene richiamata la funzione specificata da set_exception_handler e l'esecuzione dello script termina. In altre parole ad un errore è possibile porvi rimedio e proseguire con l'esecuzione, ad una eccezione non gestita no.

Se decidiamo quindi di utilizzare le eccezioni in una applicazione PHP è importante ricordarsi di aggiungere sempre un blocco try-catch per gestirle. Diversamente da ciò che è possibile fare per gli errori, non possiamo usare set_exception_handler per rimediare ad una eccezione non gestita.

Effettua l'accesso o registrati per inserire un commento