(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.
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.