Errores Throwable

Un error Throwable es un evento de ejecución que interrumpe el flujo normal de las instrucciones. Cuando se lanza con throw un error Throwable, desenrolla la pila de llamadas hasta que es capturado por un bloque catch o se alcanza el ámbito global. Todos los bloques finally que encuentra por el camino se ejecutarán. Un error Throwable no capturado se pasa al manejador de excepciones definido con set_exception_handler(), si hay uno; de lo contrario, el programa termina con un error fatal.

Para lanzar un error Throwable desde código PHP, utilice la palabra clave throw.

Sugerencia

La biblioteca estándar de PHP (SPL) proporciona varias excepciones integradas. También es posible crear excepciones personalizadas extendiendo la clase Exception.

Es posible manejar un error Throwable en PHP rodeando el código que puede lanzar un error con un bloque try.

Advertencia

Los objetos Throwable no pueden clonarse. Intentar clonar un objeto de este tipo lanza una Error con el siguiente mensaje: Trying to clone an uncloneable object of class ClassName. Esto ocurre incluso si una subclase declara su propio método __clone(). Véanse Exception::__clone() y Error::__clone().

Manejador global de excepciones

Es posible añadir un manejador para cualquier Throwable no capturado con set_exception_handler(). Esto es similar a envolver todo el código en un bloque try-catch, salvo que la ejecución no se reanuda después: el script termina una vez que el manejador retorna.

Extender las excepciones

Una excepción definida por el usuario puede crearse extendiendo la clase integrada Exception.

Si una clase extiende la clase integrada Exception y redefine el constructor, se recomienda encarecidamente que también llame a parent::__construct() para asegurarse de que todos los datos disponibles se han asignado correctamente. El método __toString() puede sobrescribirse para proporcionar una salida personalizada cuando el objeto se utiliza como un string.

Ejemplo #1 Extender Exception

<?php
class CustomException extends Exception
{
    // Redefinir el constructor para que el mensaje no sea opcional
    public function __construct($message, $code = 0, ?Throwable $previous = null) {
        // algo de código

        // Asegurarse de que todo se asigna correctamente
        parent::__construct($message, $code, $previous);
    }

    // Representación personalizada del objeto como string
    public function __toString() {
        return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
    }

    public function customFunction() {
        echo "Una función personalizada para este tipo de excepción\n";
    }
}

try {
    throw new CustomException("Algo ha ocurrido", 5);
} catch (CustomException $e) {
    echo "Excepción personalizada capturada\n", $e;
    $e->customFunction();
}

El ejemplo anterior mostrará:

Excepción personalizada capturada
CustomException: [5]: Algo ha ocurrido
Una función personalizada para este tipo de excepción
+add a note

User Contributed Notes

There are no user contributed notes for this page.