Encontré un problema realmente interesante en Internet sobre Excepciones y errores, pero no puedo obtenerlo.
class MyException extends Exception { public function __construct(string $message) { $this -> message = $message; } } class A { public function __construct() { throw new MyException("an error appeared"); } } $err = null; try { new A(); } catch (MyException $err) { throw new Exception('another error appeared'); } catch (Exception $err) { echo $err; }Cuando ejecuto el código recibo
Fatal error: Uncaught Exception: another error appeared in C:\xamppNo entiendo si es un problema con el código o así es como funciona en realidad. Quizás podrías ayudarme. ¿Ese error fatal es para una excepción no tratada? ¡Gracias!
Sí, el error fatal es para una excepción no controlada aquí:
$err = null; try { new A(); } catch (MyException $err) { --->throw new Exception('another error appeared'); } catch (Exception $err) { echo $err; }En caso de que se pregunte qué es lo que conduce a esto, es esta línea en su fragmento de código:
$err = null; try { ---> new A(); }El segundo bloque catch no detecta la excepción lanzada en el primer bloque catch . Solo se puede usar para capturar un tipo adicional de excepción lanzada en el primer bloque de try . Para capturar su segunda excepción, debe agregar una captura de prueba anidada:
try { new A(); } catch (MyException $err) { try { throw new Exception('another error appeared'); } catch (Exception $err) { echo $err; } }