throw

(PHP 5, PHP 7, PHP 8)

La palabra clave throw es una expresión y puede utilizarse en cualquier contexto de expresión. Toma un objeto Throwable como argumento.

Precaución

Antes de PHP 8.0.0, la palabra clave throw era una sentencia y no una expresión.

Intentar lanzar con throw un objeto que no es Throwable lanzará una Error. Como las clases de usuario no pueden implementar directamente Throwable, el objeto lanzado debe ser una instancia de Error o de Exception, o de una subclase de alguna de ellas.

Ejemplo #1 Lanzar un objeto que no es Throwable

<?php
throw new class {};

Resultado del ejemplo anterior es similar a:

PHP Fatal error:  Uncaught Error: Cannot throw objects that do not implement Throwable in Command line code:1
Stack trace:
#0 {main}

Después de utilizar throw, el flujo normal de ejecución se detiene y la pila de llamadas se desenrolla hasta que el objeto es capturado por un bloque catch o se alcanza el ámbito global. Todos los bloques finally encontrados por el camino se ejecutan. Si se alcanza el ámbito global, el objeto se pasa al manejador de excepciones definido con set_exception_handler(), si hay uno, y el script termina una vez que el manejador retorna. De lo contrario, el programa termina con un error fatal que contiene la traza de la pila que indica dónde se lanzó el objeto Throwable.

Ejemplo #2 Lanzar una excepción en el ámbito global

<?php
echo "Antes de la excepción\n";
throw new Exception('Detener la ejecución');
echo "Después de la excepción\n";

Resultado del ejemplo anterior es similar a:

Antes de la excepción
PHP Fatal error:  Uncaught Exception: Detener la ejecución in Command line code:2
Stack trace:
#0 {main}
  thrown in Command line code on line 2

Ejemplo #3 Lanzar una excepción en una función

<?php

function foo() {
    echo "Antes de la excepción\n";
    throw new Exception('Detener la ejecución');
    echo "Después de la excepción\n";
}

foo();

Resultado del ejemplo anterior es similar a:

Antes de la excepción
PHP Fatal error:  Uncaught Exception: Detener la ejecución in Command line code:3
Stack trace:
#0 Command line code(7): foo()
#1 {main}
  thrown in Command line code on line 3

Como throw es una expresión, puede utilizarse para ramificar según el resultado de otra expresión si su valor es inapropiado.

Ejemplo #4 Uso de throw como expresión

Solo permitido a partir de PHP 8.0.0.

<?php

function test() {
    do_something_risky() or throw new Exception('No funcionó');
}

function do_something_risky() {
    return false; // Simular un fallo
}

try {
    test();
} catch (Exception $e) {
    print $e->getMessage();
}

El ejemplo anterior mostrará:

No funcionó

Es posible manejar un Throwable lanzado mediante un bloque try-catch. Consulte la sección sobre el manejo de errores para más información.

+add a note

User Contributed Notes

There are no user contributed notes for this page.