<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/langref.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'language.exceptions.php',
    1 => 'Las excepciones',
    2 => 'Las excepciones',
  ),
  'up' => 
  array (
    0 => 'langref.php',
    1 => 'Referencia del lenguaje',
  ),
  'prev' => 
  array (
    0 => 'language.errors.php7.php',
    1 => 'Errores en PHP 7',
  ),
  'next' => 
  array (
    0 => 'language.exceptions.extending.php',
    1 => 'Extender las Excepciones',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'language/exceptions.xml',
  ),
  'history' => 
  array (
  ),
  'extra_header_links' => 
  array (
    'rel' => 'alternate',
    'href' => '/manual/en/feeds/language.exceptions.atom',
    'type' => 'application/atom+xml',
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.exceptions" class="chapter">
 
 <h1 class="title">Las excepciones</h1>
<h2>Tabla de contenidos</h2><ul class="chunklist chunklist_chapter"><li><a href="language.exceptions.extending.php">Extender las Excepciones</a></li></ul>

 <p class="para">
  PHP tiene un manejo de excepciones similar al que ofrecen otros
  lenguajes de programación.
  Una excepción puede ser lanzada (&quot;<a href="language.exceptions.php" class="link"><code class="literal">throw</code></a>&quot;) y capturada
  (&quot;<a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>&quot;) en PHP. El código deberá estar rodeado
  de un bloque <a href="language.exceptions.php" class="link"><code class="literal">try</code></a> para facilitar la captura de una excepción
  potencial. Cada <a href="language.exceptions.php" class="link"><code class="literal">try</code></a> debe tener al menos
  un bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> o <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> correspondiente.
 </p>
 <p class="para">
  Si una excepción es lanzada y el ámbito actual de la función no tiene
  un bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>, la excepción &quot;subirá&quot; la pila de llamadas de la función llamadora
  hasta encontrar un bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> correspondiente. Todos los bloques <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> encontrados
  serán ejecutados. Si la pila de llamadas se desenrolla hasta el ámbito global sin
  encontrar un bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> correspondiente, el programa será terminado con
  un error fatal a menos que se haya definido un manejador global de excepciones.
 </p>
 <p class="para">
  El objeto lanzado debe ser una <a href="language.operators.type.php" class="link"><code class="literal">instanceof</code></a> <span class="interfacename"><a href="class.throwable.php" class="interfacename">Throwable</a></span>.
  Intentar lanzar un objeto que no lo es resultará en un error fatal emitido por PHP.
 </p>
 <p class="para">
  A partir de PHP 8.0.0, la palabra clave <a href="language.exceptions.php" class="link"><code class="literal">throw</code></a> es una expresión y puede ser
  utilizada en cualquier contexto de expresiones. En versiones anteriores era una declaración que debía estar en su propia línea.
 </p>

  <div id="language.exceptions.catch" class="sect1">
   <h2 class="title"><code class="literal">catch</code></h2>
   <p class="para">
    Un bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> define cómo reaccionar ante una excepción que ha sido lanzada.
    Un bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> define uno o más tipos de excepciones o errores que puede
    manejar, y opcionalmente una variable en la que asignar la excepción.
    (Esta variable era requerida en versiones anteriores a PHP 8.0.0)
    El primer bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> que una excepción o error lanzado encuentre y que corresponda al
    tipo del objeto lanzado manejará el objeto.
   </p>
   <p class="para">
    Varios bloques <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> pueden ser utilizados para atrapar diferentes
    clases de excepciones. La ejecución normal (cuando ninguna excepción es lanzada
    en el bloque <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>) continúa después del último
    bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> definido en la secuencia. Las excepciones
    pueden ser lanzadas (<a href="language.exceptions.php" class="link"><code class="literal">throw</code></a>) o relanzadas en un bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>. De lo contrario,
    la ejecución continuará después del bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> que haya sido activado.
   </p>
   <p class="para">
    Cuando una excepción es lanzada, el código siguiente al tratamiento no será
    ejecutado y PHP intentará encontrar el primer bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> correspondiente.
    Si una excepción no es capturada, un error fatal de PHP será
    enviado con un mensaje &quot;<code class="literal">Uncaught Exception ...</code>&quot;
    indicando que la excepción no pudo ser capturada a menos que un manejador
    de excepciones sea definido con la función
    <span class="function"><a href="function.set-exception-handler.php" class="function">set_exception_handler()</a></span>.
   </p>
   <p class="para">
    A partir de PHP 7.1, un bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> puede especificar múltiples excepciones a
    través del carácter pipe (<code class="literal">|</code>). Esto es útil cuando
    diferentes excepciones de diferentes jerarquías de clases son tratadas
    de la misma manera.
   </p>
   <p class="para">
    A partir de PHP 8.0.0, el nombre de variable para la excepción capturada es
    opcional. Si no se especifica, el bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> será siempre ejecutado pero
    no tendrá acceso al objeto lanzado.
   </p>
  </div>

  <div id="language.exceptions.finally" class="sect1">
   <h2 class="title"><code class="literal">finally</code></h2>
   <p class="para">
    Un bloque <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> también puede ser
    especificado después de bloques <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>. El código dentro
    del bloque <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> será siempre ejecutado después de los bloques
    <a href="language.exceptions.php" class="link"><code class="literal">try</code></a> y <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>, independientemente de si
    una excepción ha sido lanzada, antes de continuar con la ejecución normal.
   </p>
   <p class="para">
    Una interacción notable es entre un bloque <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> y una declaración
    <a href="function.return.php" class="link"><code class="literal">return</code></a>.
    Si una declaración <a href="function.return.php" class="link"><code class="literal">return</code></a> es encontrada dentro de los bloques <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>
    o <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>, el bloque <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> será igualmente ejecutado. Además,
    la declaración <a href="function.return.php" class="link"><code class="literal">return</code></a> es evaluada cuando es encontrada, pero el
    resultado será retornado después de que el bloque <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> sea ejecutado.
    Adicionalmente, si el bloque <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> contiene también una declaración
    <a href="function.return.php" class="link"><code class="literal">return</code></a> el valor del bloque <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> es retornado.
   </p>
   <p class="para">
    Otra interacción notable es entre una excepción lanzada en un bloque <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>,
    y una excepción lanzada en un bloque <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>. Si una excepción es lanzada en ambos bloques,
    entonces, la excepción lanzada en el bloque <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> será la que se propagará,
    y la excepción lanzada en el bloque <a href="language.exceptions.php" class="link"><code class="literal">try</code></a> será utilizada como excepción previa.
   </p>
  </div>

 <div id="language.exceptions.exception-handler" class="sect1">
  <h2 class="title">Manejador global de excepciones</h2>
  <p class="para">
   Si una excepción es permitida para subir hasta el ámbito global, puede
   ser capturada por un manejador de excepciones global si ha sido definido. La función
   <span class="function"><a href="function.set-exception-handler.php" class="function">set_exception_handler()</a></span> puede definir una función que será
   llamada en lugar de un bloque <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> si ningún otro bloque es invocado.
   El efecto es esencialmente idéntico a envolver el programa entero en un
   bloque <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>-<a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> con esta función como <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>.
  </p>
 </div>

 <div id="language.exceptions.notes" class="sect1">
   <h2 class="title">Notas</h2>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <p class="para">
     Las funciones internas de PHP utilizan principalmente el
     <a href="errorfunc.configuration.php#ini.error-reporting" class="link">Error reporting</a>, solo las extensiones
     <a href="language.oop5.php" class="link">orientadas a objetos</a>
     utilizan excepciones. Sin embargo, los errores pueden ser fácilmente convertidos en
     excepciones con <a href="class.errorexception.php" class="link">ErrorException</a>.
     Sin embargo, esta técnica solo funciona para errores no fatales.
    </p>
    <div class="example" id="example-1">
     <p><strong>Ejemplo #1 Convertir el error reporting en excepciones</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">exceptions_error_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">$severity</span><span style="color: #007700">, </span><span style="color: #0000BB">$message</span><span style="color: #007700">, </span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$lineno</span><span style="color: #007700">) {<br />    throw new </span><span style="color: #0000BB">ErrorException</span><span style="color: #007700">(</span><span style="color: #0000BB">$message</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">$severity</span><span style="color: #007700">, </span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$lineno</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">set_error_handler</span><span style="color: #007700">(</span><span style="color: #DD0000">'exceptions_error_handler'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p></blockquote>
   <div class="tip"><strong class="tip">Sugerencia</strong>
    <p class="para">
     La <a href="book.spl.php#intro.spl" class="link">biblioteca estándar PHP (SPL)</a> proporciona
     un buen número <a href="spl.exceptions.php" class="link">de excepciones adicionales</a>.
    </p>
   </div>
 </div>

  <div id="language.exceptions.examples" class="sect1">
   <h2 class="title">Ejemplos</h2>

   <div class="example" id="example-2">
    <p><strong>Ejemplo #2 Lanzar una excepción</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">inverse</span><span style="color: #007700">(</span><span style="color: #0000BB">$x</span><span style="color: #007700">) {<br />    if (!</span><span style="color: #0000BB">$x</span><span style="color: #007700">) {<br />        throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'División por cero.'</span><span style="color: #007700">);<br />    }<br />    return </span><span style="color: #0000BB">1</span><span style="color: #007700">/</span><span style="color: #0000BB">$x</span><span style="color: #007700">;<br />}<br /><br />try {<br />    echo </span><span style="color: #0000BB">inverse</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #0000BB">inverse</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />} catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'Excepción recibida: '</span><span style="color: #007700">,  </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// Continuar la ejecución<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"¡Hola mundo!\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
0.2
Excepción recibida: División por cero.
¡Hola mundo!
</pre></div>
    </div>
   </div>
   <div class="example" id="example-3">
    <p><strong>Ejemplo #3 Manejo de la excepción con un bloque <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">inverse</span><span style="color: #007700">(</span><span style="color: #0000BB">$x</span><span style="color: #007700">) {<br />    if (!</span><span style="color: #0000BB">$x</span><span style="color: #007700">) {<br />        throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'División por cero.'</span><span style="color: #007700">);<br />    }<br />    return </span><span style="color: #0000BB">1</span><span style="color: #007700">/</span><span style="color: #0000BB">$x</span><span style="color: #007700">;<br />}<br /><br />try {<br />    echo </span><span style="color: #0000BB">inverse</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />} catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'Excepción recibida: '</span><span style="color: #007700">,  </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />} finally {<br />    echo </span><span style="color: #DD0000">"Primer fin.\n"</span><span style="color: #007700">;<br />}<br /><br />try {<br />    echo </span><span style="color: #0000BB">inverse</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />} catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'Excepción recibida: '</span><span style="color: #007700">,  </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />} finally {<br />    echo </span><span style="color: #DD0000">"Segundo fin.\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// Continuar la ejecución<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"¡Hola mundo!\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
0.2
Primer fin.
Excepción recibida: División por cero.
Segundo fin.
¡Hola mundo!
</pre></div>
    </div>
   </div>
   <div class="example" id="example-4">
    <p><strong>Ejemplo #4 Interacción entre el bloque <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> y <a href="function.return.php" class="link"><code class="literal">return</code></a></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">() {<br />    try {<br />        throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">);<br />    } catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />        return </span><span style="color: #DD0000">'catch'</span><span style="color: #007700">;<br />    } finally {<br />        return </span><span style="color: #DD0000">'finally'</span><span style="color: #007700">;<br />    }<br />}<br /><br />echo </span><span style="color: #0000BB">test</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
finally
</pre></div>
    </div>
   </div>
   <div class="example" id="example-5">
    <p><strong>Ejemplo #5 Herencia de una excepción</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyException </span><span style="color: #007700">extends </span><span style="color: #0000BB">Exception </span><span style="color: #007700">{ }<br /><br />class </span><span style="color: #0000BB">Test </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">testing</span><span style="color: #007700">() {<br />        try {<br />            try {<br />                throw new </span><span style="color: #0000BB">MyException</span><span style="color: #007700">(</span><span style="color: #DD0000">'foo!'</span><span style="color: #007700">);<br />            } catch (</span><span style="color: #0000BB">MyException $e</span><span style="color: #007700">) {<br />                </span><span style="color: #FF8000">// se relanza<br />                </span><span style="color: #007700">throw </span><span style="color: #0000BB">$e</span><span style="color: #007700">;<br />            }<br />        } catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />            </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">());<br />        }<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">Test</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">testing</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
string(4) &quot;foo!&quot;
</pre></div>
    </div>
   </div>
   <div class="example" id="example-6">
    <p><strong>Ejemplo #6 Manejo de excepciones de captura múltiple</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyException </span><span style="color: #007700">extends </span><span style="color: #0000BB">Exception </span><span style="color: #007700">{ }<br /><br />class </span><span style="color: #0000BB">MyOtherException </span><span style="color: #007700">extends </span><span style="color: #0000BB">Exception </span><span style="color: #007700">{ }<br /><br />class </span><span style="color: #0000BB">Test </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">testing</span><span style="color: #007700">() {<br />        try {<br />            throw new </span><span style="color: #0000BB">MyException</span><span style="color: #007700">();<br />        } catch (</span><span style="color: #0000BB">MyException </span><span style="color: #007700">| </span><span style="color: #0000BB">MyOtherException $e</span><span style="color: #007700">) {<br />            </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">get_class</span><span style="color: #007700">(</span><span style="color: #0000BB">$e</span><span style="color: #007700">));<br />        }<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">Test</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">testing</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
string(11) &quot;MyException&quot;
</pre></div>
    </div>
   </div>
   <div class="example" id="example-7">
    <p><strong>Ejemplo #7 Omitir la variable capturada</strong></p>
    <div class="example-contents"><p>Solo permitido en PHP 8.0.0 y versiones posteriores.</p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">() {<br />    throw new </span><span style="color: #0000BB">SpecificException</span><span style="color: #007700">(</span><span style="color: #DD0000">'Oopsie'</span><span style="color: #007700">);<br />}<br /><br />try {<br />    </span><span style="color: #0000BB">test</span><span style="color: #007700">();<br />} catch (</span><span style="color: #0000BB">SpecificException</span><span style="color: #007700">) {<br />    print </span><span style="color: #DD0000">"Se lanzó una SpecificException, pero no nos importa con los detalles."</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Se lanzó una SpecificException, pero no nos importa con los detalles.
</pre></div>
    </div>
   </div>
   <div class="example" id="example-8">
    <p><strong>Ejemplo #8 Throw como expresión</strong></p>
    <div class="example-contents"><p>Solo permitido en PHP 8.0.0 y versiones posteriores.</p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">SpecificException </span><span style="color: #007700">extends </span><span style="color: #0000BB">Exception </span><span style="color: #007700">{}<br /><br />function </span><span style="color: #0000BB">test</span><span style="color: #007700">() {<br />    </span><span style="color: #0000BB">do_something_risky</span><span style="color: #007700">() or throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'No funcionó'</span><span style="color: #007700">);<br />}<br /><br />function </span><span style="color: #0000BB">do_something_risky</span><span style="color: #007700">() {<br />    return </span><span style="color: #0000BB">false</span><span style="color: #007700">; </span><span style="color: #FF8000">// Simular un fallo<br /></span><span style="color: #007700">}<br /><br />try {<br />    </span><span style="color: #0000BB">test</span><span style="color: #007700">();<br />} catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />    print </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">();<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
No funcionó
</pre></div>
    </div>
   </div>
   <div class="example" id="example-9">
    <p><strong>Ejemplo #9 Excepción en try y en finally</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">try {<br />    try {<br />        throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #0000BB">message</span><span style="color: #007700">: </span><span style="color: #DD0000">'Third'</span><span style="color: #007700">, </span><span style="color: #0000BB">previous</span><span style="color: #007700">: new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'Fourth'</span><span style="color: #007700">));<br />    } finally {<br />        throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #0000BB">message</span><span style="color: #007700">: </span><span style="color: #DD0000">'First'</span><span style="color: #007700">, </span><span style="color: #0000BB">previous</span><span style="color: #007700">: new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'Second'</span><span style="color: #007700">));<br />    }<br />} catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(<br />        </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(),<br />        </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getPrevious</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(),<br />        </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getPrevious</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">getPrevious</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(),<br />        </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getPrevious</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">getPrevious</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">getPrevious</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(),<br />    );<br />}</span></span></code></div>
    </div>

    <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
string(5) &quot;First&quot;
string(6) &quot;Second&quot;
string(5) &quot;Third&quot;
string(6) &quot;Fourth&quot;
</pre></div>
    </div>
   </div>
  </div>

 

 </div>
<?php manual_footer($setup); ?>