PHP Eccezione e gestione degli errori


Esempio

prova a prendere

try..catch blocchi di controllo possono essere utilizzati per controllare il flusso di un programma in cui possono essere lanciate eccezioni . Possono essere catturati e gestiti con garbo piuttosto che lasciare che PHP si fermi quando viene incontrato:

try {
    // Do a bunch of things...
    throw new Exception('My test exception!');
} catch (Exception $ex) {
    // Your logic failed. What do you want to do about that? Log it:
    file_put_contents('my_error_log.txt', $ex->getMessage(), FILE_APPEND);
}

L'esempio precedente catch l'eccezione lanciata nel blocco try e registrerà il suo messaggio ("My test exception!") In un file di testo.

Cattura diversi tipi di eccezioni

È possibile implementare più istruzioni catch per diversi tipi di eccezioni da gestire in diversi modi, ad esempio:

try {
    throw new InvalidArgumentException('Argument #1 must be an integer!');
} catch (InvalidArgumentException $ex) {
    var_dump('Invalid argument exception caught: ' . $ex->getMessage());
} catch (Exception $ex) {
    var_dump('Standard exception caught: ' . $ex->getMessage());
}

Nell'esempio precedente verrà utilizzato il primo catch poiché corrisponde per primo nell'ordine di esecuzione. Se si scambia l'ordine delle istruzioni catch , il catcher Exception eseguito per primo.

Allo stesso modo, se si dovesse lanciare un UnexpectedValueException invece si dovrebbe vedere il secondo gestore per uno standard Exception in uso.

finalmente

Se avete bisogno di qualcosa da fare dopo il verificarsi di una try o un catch corsa è terminata, è possibile utilizzare una finally dichiarazione:

try {
    throw new Exception('Hello world');
} catch (Exception $e) {
    echo 'Uh oh! ' . $e->getMessage();
} finally {
    echo " - I'm finished now - home time!";
}

L'esempio precedente produrrebbe quanto segue:

Uh Oh! Ciao mondo - Sono finito ora - A casa!

throwable

In PHP 7 vediamo l'introduzione dell'interfaccia Throwable , che implementa Error e Exception . Questo aggiunge un livello di contratto di servizio tra le eccezioni in PHP 7 e consente di implementare l'interfaccia per le proprie eccezioni personalizzate:

$handler = function(\Throwable $ex) {
    $msg = "[ {$ex->getCode()} ] {$ex->getTraceAsString()}";
    mail('admin@server.com', $ex->getMessage(), $msg);
    echo myNiceErrorMessageFunction();
};
set_exception_handler($handler);
set_error_handler($handler);

Prima di PHP 7 puoi semplicemente digitare Exception poiché da PHP 5 tutte le classi di eccezioni lo estendono.