PHP Manejo de excepciones y errores.


Ejemplo

trata de atraparlo

try..catch bloques try..catch se pueden usar para controlar el flujo de un programa donde se pueden lanzar excepciones . Se pueden capturar y manejar con gracia en lugar de dejar que PHP se detenga cuando se encuentra uno:

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);
}

El ejemplo anterior podría catch la Excepción lanzada en el bloque de try y registrar su mensaje ("¡Mi excepción de prueba!") A un archivo de texto.

La captura de diferentes tipos de excepción

Puede implementar varias declaraciones catch para que los diferentes tipos de excepciones se manejen de diferentes maneras, por ejemplo:

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());
}

En el ejemplo anterior, se utilizará la primera catch , ya que coincide primero en el orden de ejecución. Si intercambiaba el orden de las instrucciones catch , el catcher Exception se ejecutaría primero.

De manera similar, si tuviera que lanzar una Exception UnexpectedValueException cambio, vería el segundo controlador de una Exception estándar que se está utilizando.

finalmente

Si necesita hacer algo después de que se haya ejecutado un try o un catch , puede usar una sentencia finally :

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

El ejemplo anterior daría como resultado lo siguiente:

¡UH oh! Hola mundo - Ya terminé - ¡hora de casa!

lanzable

En PHP 7 vemos la introducción de la interfaz de Throwable , que implementa tanto el Error como la Exception . Esto agrega un nivel de contrato de servicio entre las excepciones en PHP 7 y le permite implementar la interfaz para sus propias excepciones personalizadas:

$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);

Antes de PHP 7, simplemente puede escribir Exception sugerencia, ya que a partir de PHP 5 todas las clases de excepción lo amplían.