<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.errorfunc.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'function.set-exception-handler.php',
    1 => 'set_exception_handler',
    2 => 'Define una funci&oacute;n de usuario para gestionar excepciones',
  ),
  'up' => 
  array (
    0 => 'ref.errorfunc.php',
    1 => 'Funciones de Manejo de Errores',
  ),
  'prev' => 
  array (
    0 => 'function.set-error-handler.php',
    1 => 'set_error_handler',
  ),
  'next' => 
  array (
    0 => 'function.trigger-error.php',
    1 => 'trigger_error',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/errorfunc/functions/set-exception-handler.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.set-exception-handler" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">set_exception_handler</h1>
  <p class="verinfo">(PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">set_exception_handler</span> &mdash; <span class="dc-title">
   Define una función de usuario para gestionar excepciones
  </span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.set-exception-handler-description">
  <h3 class="title">Descripción</h3>
  <div class="methodsynopsis dc-description">
   <span class="modifier">function</span> <span class="methodname"><strong>set_exception_handler</strong></span>(<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span></span> <code class="parameter">$callback</code></span>): <span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span></span></div>

  <p class="para rdfs-comment">
   <span class="function"><strong>set_exception_handler()</strong></span> define el manejador de excepciones
   por defecto si una excepción no es capturada con un bloque
   de prueba/atrapa. La ejecución se detendrá después de la llamada a la
   función <code class="parameter">callback</code>.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="simpara">
    Mientras se ejecuta un gestor de excepciones, ningún gestor de excepciones
    está activo: a partir de PHP 8.3.0 el motor lo desactiva antes de invocarlo,
    de modo que una excepción lanzada por el gestor no le sea transmitida de
    nuevo. Por lo tanto, llamada desde dentro de un gestor,
    <span class="function"><strong>set_exception_handler()</strong></span> indica que no hay ningún gestor
    previamente definido.
   </p>
   <p class="simpara">
    A partir de PHP 8.3.5 el motor también apila el gestor que va a invocar en la
    pila de gestores, por lo que <span class="function"><a href="function.restore-exception-handler.php" class="function">restore_exception_handler()</a></span>
    llamada desde dentro de un gestor reinstala el gestor que se está ejecutando
    actualmente en lugar del que estaba activo antes de él.
   </p>
   <p class="simpara">
    El gestor en ejecución se reinstala automáticamente cuando retorna, pero solo
    si en ese momento no hay ningún gestor de excepciones activo. En cuanto el
    gestor llama a <span class="function"><strong>set_exception_handler()</strong></span> o a
    <span class="function"><a href="function.restore-exception-handler.php" class="function">restore_exception_handler()</a></span>, esta restauración automática
    se omite y el gestor activo es el que el propio gestor haya dejado
    instalado.
   </p>
   <p class="simpara">
    Por lo tanto, se desaconseja modificar el gestor de excepciones desde dentro
    de sí mismo.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.set-exception-handler-parameters">
  <h3 class="title">Parámetros</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">callback</code></dt>
     <dd>
      <p class="para">
       La función a llamar cuando ocurre una excepción no capturada.
       Esta función de gestión debe aceptar un argumento,
       que será el objeto <span class="classname"><a href="class.throwable.php" class="classname">Throwable</a></span> que fue lanzado.
       Las clases <span class="classname"><a href="class.error.php" class="classname">Error</a></span> y <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span>
       implementan la interfaz <span class="classname"><a href="class.throwable.php" class="classname">Throwable</a></span>.
       Esta es la firma del manejador:
      </p>
      <p class="para">
       <div class="methodsynopsis dc-description">
        <span class="modifier">function</span> <span class="methodname"><span class="replaceable">handler</span></span>(<span class="methodparam"><span class="type"><a href="class.throwable.php" class="type Throwable">Throwable</a></span> <code class="parameter">$ex</code></span>): <span class="type"><a href="language.types.void.php" class="type void">void</a></span></div>

      </p>
      <p class="para">
       <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> puede ser pasado en su lugar, para reinicializar este manejador
       a su estado inicial.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.set-exception-handler-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   Retorna el manejador previamente definido o <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> en caso de error.
   Si ningún manejador fue previamente definido, <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> es también
   retornado.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.set-exception-handler-changelog">
  <h3 class="title">Historial de cambios</h3>
  <p class="para">
   <table class="doctable informaltable">
    
     <thead>
      <tr>
       <th>Versión</th>
       <th>Descripción</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>8.3.5</td>
       <td>
        El gestor de excepciones que va a ser invocado ahora se apila en la pila
        de gestores y se reinstala una vez que retorna, a menos que el propio
        gestor haya modificado la pila.
       </td>
      </tr>

      <tr>
       <td>8.3.0</td>
       <td>
        El gestor de excepciones activo ahora se desactiva mientras se ejecuta,
        por lo que <span class="function"><strong>set_exception_handler()</strong></span> llamada desde
        dentro de un gestor indica que no hay ningún gestor previamente
        definido.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.set-exception-handler-examples">
  <h3 class="title">Ejemplos</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Ejemplo con <span class="function"><strong>set_exception_handler()</strong></span></strong></p>
    <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">function </span><span style="color: #0000BB">exception_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">Throwable $exception</span><span style="color: #007700">) {
  echo </span><span style="color: #DD0000">"Excepción no capturada: " </span><span style="color: #007700">, </span><span style="color: #0000BB">$exception</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">;
}

</span><span style="color: #0000BB">set_exception_handler</span><span style="color: #007700">(</span><span style="color: #DD0000">'exception_handler'</span><span style="color: #007700">);

throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'Excepción no capturada'</span><span style="color: #007700">);
echo </span><span style="color: #DD0000">"No ejecutado\n"</span><span style="color: #007700">;
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.set-exception-handler-seealso">
  <h3 class="title">Véase también</h3>
  <ul class="simplelist">
   <li><span class="function"><a href="function.get-exception-handler.php" class="function" rel="rdfs-seeAlso">get_exception_handler()</a> - Devuelve la funci&oacute;n de gesti&oacute;n de excepciones definida por el usuario</span></li>
   <li><span class="function"><a href="function.restore-exception-handler.php" class="function" rel="rdfs-seeAlso">restore_exception_handler()</a> - Reactiva la antigua funci&oacute;n de gesti&oacute;n de excepciones</span></li>
   <li><span class="function"><a href="function.restore-error-handler.php" class="function" rel="rdfs-seeAlso">restore_error_handler()</a> - Restaura la funci&oacute;n anterior de manejo de errores</span></li>
   <li><span class="function"><a href="function.error-reporting.php" class="function" rel="rdfs-seeAlso">error_reporting()</a> - Establece el nivel de reporte de errores de PHP</span></li>
   <li>Las <a href="language.error-handling.throwable.php#language.exceptions" class="link">excepciones</a></li>
  </ul>
 </div>


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