<?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 => 'fr',
  ),
  'this' => 
  array (
    0 => 'function.set-error-handler.php',
    1 => 'set_error_handler',
    2 => 'Sp&eacute;cifie une fonction utilisateur comme gestionnaire d\'erreurs',
  ),
  'up' => 
  array (
    0 => 'ref.errorfunc.php',
    1 => 'Fonctions sur la gestion des erreurs',
  ),
  'prev' => 
  array (
    0 => 'function.restore-exception-handler.php',
    1 => 'restore_exception_handler',
  ),
  'next' => 
  array (
    0 => 'function.set-exception-handler.php',
    1 => 'set_exception_handler',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/errorfunc/functions/set-error-handler.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.set-error-handler" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">set_error_handler</h1>
  <p class="verinfo">(PHP 4 &gt;= 4.0.1, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">set_error_handler</span> &mdash; <span class="dc-title">Spécifie une fonction utilisateur comme gestionnaire d&#039;erreurs</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.set-error-handler-description">
  <h3 class="title">Description</h3>
  <div class="methodsynopsis dc-description">
   <span class="modifier">function</span> <span class="methodname"><strong>set_error_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="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$error_levels</code><span class="initializer"> = <strong><code><a href="errorfunc.constants.php#constant.e-all">E_ALL</a></code></strong></span></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="simpara">
   <span class="function"><strong>set_error_handler()</strong></span> choisit la fonction utilisateur
   <code class="parameter">callback</code> pour gérer les erreurs dans un script.
   Le gestionnaire actif jusqu&#039;alors est sauvegardé sur une pile interne de
   gestionnaires d&#039;erreurs, d&#039;où <span class="function"><a href="function.restore-error-handler.php" class="function">restore_error_handler()</a></span>
   le dépile.
  </p>
  <p class="para">
   Cette fonction peut être utilisée pour définir des gestionnaires d&#039;erreurs personnalisés pendant l&#039;exécution,
   par exemple dans des applications qui ont besoin de nettoyer des fichiers/données lorsqu&#039;une erreur critique
   se produit ou lorsqu&#039;une erreur est déclenchée en réponse à certaines conditions
   (à l&#039;aide de la fonction <span class="function"><a href="function.trigger-error.php" class="function">trigger_error()</a></span>).
  </p>
  <p class="para">
   Il faut se rappeler que la fonction standard de traitement des erreurs
   de PHP est alors complètement ignorée pour les erreurs de types
   spécifiés par <code class="parameter">error_levels</code> à moins que la fonction
   de rappel retourne <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
   Les paramètres de la fonction <span class="function"><a href="function.error-reporting.php" class="function">error_reporting()</a></span> n&#039;auront aucun effet
   et le gestionnaire d&#039;erreurs sera appelé quoi qu&#039;il arrive. Cependant, il est toujours possible
   de lire la valeur actuelle de
   <a href="errorfunc.configuration.php#ini.error-reporting" class="link">error_reporting</a> et
   de faire réagir la fonction de gestion des erreurs en conséquence.
  </p>

  <p class="para">
   Il est à noter que c&#039;est la responsabilité du gestionnaire d&#039;erreurs d&#039;arrêter
   l&#039;exécution du script si nécessaire en appelant la fonction <span class="function"><a href="function.exit.php" class="function">exit()</a></span>. Si la fonction du gestionnaire d&#039;erreurs retourne,
   l&#039;exécution du script se poursuivra avec l&#039;instruction suivante après celle qui a causé l&#039;erreur.
  </p>
  <p class="para">
   Les types d&#039;erreur suivants ne peuvent pas être gérés avec cette fonction : 
   <strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong>, <strong><code><a href="errorfunc.constants.php#constant.e-parse">E_PARSE</a></code></strong>,
   <strong><code><a href="errorfunc.constants.php#constant.e-core-error">E_CORE_ERROR</a></code></strong>, <strong><code><a href="errorfunc.constants.php#constant.e-core-warning">E_CORE_WARNING</a></code></strong>,
   <strong><code><a href="errorfunc.constants.php#constant.e-compile-error">E_COMPILE_ERROR</a></code></strong>,
   <strong><code><a href="errorfunc.constants.php#constant.e-compile-warning">E_COMPILE_WARNING</a></code></strong> indépendamment d&#039;où elles sont levées,
   ainsi que la plupart des
   <strong><code><a href="errorfunc.constants.php#constant.e-strict">E_STRICT</a></code></strong> du fichier dans lequel 
   <span class="function"><strong>set_error_handler()</strong></span> est appelé.
  </p>
  <p class="para">
   Si une erreur survient avant que le script ne soit exécuté (par exemple
   un téléversement de fichier), le gestionnaire d&#039;erreurs personnalisé ne pourra
   pas être appelé, car il n&#039;est pas encore enregistré.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.set-error-handler-parameters">
  <h3 class="title">Liste de paramètres</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">callback</code></dt>
     <dd>
      <p class="simpara">
       Si <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> est fourni, aucun gestionnaire utilisateur ne reste actif et
       les erreurs sont traitées par le gestionnaire d&#039;erreurs interne.
       Le gestionnaire actif jusqu&#039;alors est toujours sauvegardé sur la pile et
       peut être rétabli avec <span class="function"><a href="function.restore-error-handler.php" class="function">restore_error_handler()</a></span>.
       Sinon, le gestionnaire est une fonction de rappel avec la signature suivante :
      </p>
      <p class="para">
       <div class="methodsynopsis dc-description">
        <span class="modifier">function</span> <span class="methodname"><span class="replaceable">handler</span></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$errno</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$errstr</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$errfile</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$errline</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter">$errcontext</code><span class="initializer"> = ?</span></span><br>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

       <dl>
        
         <dt><code class="parameter">errno</code></dt>
         <dd>
          <p class="simpara">
           Le premier paramètre <code class="parameter">errno</code>, sera passé le
           niveau d&#039;erreur, sous la forme d&#039;un entier.
          </p>
         </dd>
        
        
         <dt><code class="parameter">errstr</code></dt>
         <dd>
          <p class="simpara">
           Le second paramètre <code class="parameter">errstr</code>, sera passé le
           message d&#039;erreur, sous forme de chaîne.
          </p>
         </dd>
        
        
         <dt><code class="parameter">errfile</code></dt>
         <dd>
          <p class="simpara">
           Si la fonction de rappel accepte un troisième paramètre, <code class="parameter">errfile</code>,
           il sera passé le nom du fichier dans lequel l&#039;erreur a été identifiée, sous forme de chaîne.
          </p>
         </dd>
        
        
         <dt><code class="parameter">errline</code></dt>
         <dd>
          <p class="simpara">
           Si la fonction de rappel accepte un quatrième paramètre, <code class="parameter">errline</code>,
           il sera passé le numéro de ligne à laquelle l&#039;erreur a été identifiée, sous la forme d&#039;un entier.
          </p>
         </dd>
        
        
         <dt><code class="parameter">errcontext</code></dt>
         <dd>
          <p class="simpara">
           Si la fonction de rappel accepte un cinquième paramètre, <code class="parameter">errcontext</code>,
           il sera passé comme un tableau qui pointe sur la table des symboles actifs à
           l&#039;instant où l&#039;erreur est survenue. En d&#039;autres termes, <code class="parameter">errcontext</code>
           contient un tableau avec toutes les variables qui existaient lorsque
           l&#039;erreur a été déclenchée.
           Les gestionnaires d&#039;erreurs utilisateur ne doivent pas modifier le contexte d&#039;erreur.
          </p>
          <div class="warning"><strong class="warning">Avertissement</strong>
           <p class="simpara">
            Ce paramètre est <em>OBSOLÈTE</em> à partir de PHP 7.2.0,
            et <em>SUPPRIMÉ</em> à partir de PHP 8.0.0. Si la
            fonction définit ce paramètre sans valeur par défaut, une erreur de
            &quot;too few arguments&quot; sera levée lors de son appel.
           </p>
          </div>
         </dd>
        
       </dl>
      </p>
      <p class="para">
       Si la fonction retourne <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, alors le gestionnaire d&#039;erreurs normal continue.
      </p>
     </dd>
    
    
     <dt><code class="parameter">error_levels</code></dt>
     <dd>
      <p class="para">
       Sert de masque pour appeler la fonction 
       <code class="parameter">callback</code> de la même façon que l&#039;option de
       configuration <a href="errorfunc.configuration.php#ini.error-reporting" class="link">error_reporting</a>
       contrôle les erreurs qui sont affichées. Sans le masque,
       <code class="parameter">callback</code> sera appelé pour toutes les erreurs,
       quelle que soit la valeur de
       <a href="errorfunc.configuration.php#ini.error-reporting" class="link">error_reporting</a>.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.set-error-handler-returnvalues">
  <h3 class="title">Valeurs de retour</h3>
  <p class="para">
   Retourne le dernier gestionnaire d&#039;erreurs (s&#039;il existe) sous forme de <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>.  
   Si le gestionnaire d’erreurs interne est utilisé, <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> est retourné.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.set-error-handler-changelog">
  <h3 class="title">Historique</h3>
  <p class="para">
   <table class="doctable informaltable">
    
     <thead>
      <tr>
       <th>Version</th>
       <th>Description</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>8.0.0</td>
       <td>
        <code class="parameter">errcontext</code> a été supprimé, et ne sera plus passé aux fermetures utilisateur.
       </td>
      </tr>

      <tr>
       <td>7.2.0</td>
       <td>
        <code class="parameter">errcontext</code> est devenu obsolète.
        L&#039;usage de ce paramètre émet une notice <strong><code><a href="errorfunc.constants.php#constant.e-deprecated">E_DEPRECATED</a></code></strong>.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.set-error-handler-examples">
  <h3 class="title">Exemples</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Exemple #1 Gestionnaire d&#039;erreurs avec <span class="function"><strong>set_error_handler()</strong></span> et 
     <span class="function"><a href="function.trigger-error.php" class="function">trigger_error()</a></span></strong></p>
    <div class="example-contents"><p>
     L&#039;exemple ci-dessous illustre l&#039;interception d&#039;erreurs internes avec
     génération d&#039;erreur et son exploitation dans une fonction utilisateur :
    </p></div>
    <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #FF8000">// Gestionnaire d'erreurs
</span><span style="color: #007700">function </span><span style="color: #0000BB">myErrorHandler</span><span style="color: #007700">(</span><span style="color: #0000BB">$errno</span><span style="color: #007700">, </span><span style="color: #0000BB">$errstr</span><span style="color: #007700">, </span><span style="color: #0000BB">$errfile</span><span style="color: #007700">, </span><span style="color: #0000BB">$errline</span><span style="color: #007700">)
{
   if (!(</span><span style="color: #0000BB">error_reporting</span><span style="color: #007700">() &amp; </span><span style="color: #0000BB">$errno</span><span style="color: #007700">)) {
        </span><span style="color: #FF8000">// Ce code d'erreur n'est pas inclus dans error_reporting(), donc il continue
        // jusqu'au gestionnaire d'erreur standard de PHP
        </span><span style="color: #007700">return </span><span style="color: #0000BB">false</span><span style="color: #007700">;
    }

    </span><span style="color: #FF8000">// $errstr doit peut-être être échappé :
    </span><span style="color: #0000BB">$errstr </span><span style="color: #007700">= </span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$errstr</span><span style="color: #007700">);

    switch (</span><span style="color: #0000BB">$errno</span><span style="color: #007700">) {
    case </span><span style="color: #0000BB">E_USER_ERROR</span><span style="color: #007700">:
        echo </span><span style="color: #DD0000">"&lt;b&gt;Mon ERREUR&lt;/b&gt; [</span><span style="color: #0000BB">$errno</span><span style="color: #DD0000">] </span><span style="color: #0000BB">$errstr</span><span style="color: #DD0000">&lt;br /&gt;\n"</span><span style="color: #007700">;
        echo </span><span style="color: #DD0000">"  Erreur fatale sur la ligne </span><span style="color: #0000BB">$errline</span><span style="color: #DD0000"> dans le fichier </span><span style="color: #0000BB">$errfile</span><span style="color: #DD0000">"</span><span style="color: #007700">;
        echo </span><span style="color: #DD0000">", PHP " </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_VERSION </span><span style="color: #007700">. </span><span style="color: #DD0000">" (" </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_OS </span><span style="color: #007700">. </span><span style="color: #DD0000">")&lt;br /&gt;\n"</span><span style="color: #007700">;
        echo </span><span style="color: #DD0000">"Arrêt...&lt;br /&gt;\n"</span><span style="color: #007700">;
        exit(</span><span style="color: #0000BB">1</span><span style="color: #007700">);

    case </span><span style="color: #0000BB">E_USER_WARNING</span><span style="color: #007700">:
        echo </span><span style="color: #DD0000">"&lt;b&gt;Mon ALERTE&lt;/b&gt; [</span><span style="color: #0000BB">$errno</span><span style="color: #DD0000">] </span><span style="color: #0000BB">$errstr</span><span style="color: #DD0000">&lt;br /&gt;\n"</span><span style="color: #007700">;
        break;

    case </span><span style="color: #0000BB">E_USER_NOTICE</span><span style="color: #007700">:
        echo </span><span style="color: #DD0000">"&lt;b&gt;Mon AVERTISSEMENT&lt;/b&gt; [</span><span style="color: #0000BB">$errno</span><span style="color: #DD0000">] </span><span style="color: #0000BB">$errstr</span><span style="color: #DD0000">&lt;br /&gt;\n"</span><span style="color: #007700">;
        break;

    default:
        echo </span><span style="color: #DD0000">"Type d'erreur inconnu : [</span><span style="color: #0000BB">$errno</span><span style="color: #DD0000">] </span><span style="color: #0000BB">$errstr</span><span style="color: #DD0000">&lt;br /&gt;\n"</span><span style="color: #007700">;
        break;
    }

    </span><span style="color: #FF8000">/* Ne pas exécuter le gestionnaire interne de PHP */
    </span><span style="color: #007700">return </span><span style="color: #0000BB">true</span><span style="color: #007700">;
}

</span><span style="color: #FF8000">// Fonction pour tester la gestion d'erreur
</span><span style="color: #007700">function </span><span style="color: #0000BB">scale_by_log</span><span style="color: #007700">(</span><span style="color: #0000BB">$vect</span><span style="color: #007700">, </span><span style="color: #0000BB">$scale</span><span style="color: #007700">)
{
    if (!</span><span style="color: #0000BB">is_numeric</span><span style="color: #007700">(</span><span style="color: #0000BB">$scale</span><span style="color: #007700">) || </span><span style="color: #0000BB">$scale </span><span style="color: #007700">&lt;= </span><span style="color: #0000BB">0</span><span style="color: #007700">) {
        </span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"log(x) pour x &lt;= 0 est indéfini, valeur utilisée : scale = </span><span style="color: #0000BB">$scale</span><span style="color: #DD0000">"</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_ERROR</span><span style="color: #007700">);
    }

    if (!</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$vect</span><span style="color: #007700">)) {
        </span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"Type d'entrée incorrect, tableau de valeurs attendu"</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_WARNING</span><span style="color: #007700">);
        return </span><span style="color: #0000BB">null</span><span style="color: #007700">;
    }

    </span><span style="color: #0000BB">$temp </span><span style="color: #007700">= array();
    foreach(</span><span style="color: #0000BB">$vect </span><span style="color: #007700">as </span><span style="color: #0000BB">$pos </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$value</span><span style="color: #007700">) {
        if (!</span><span style="color: #0000BB">is_numeric</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">)) {
            </span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"La valeur à la position </span><span style="color: #0000BB">$pos</span><span style="color: #DD0000"> n'est pas un nombre, utilisation 0 (zéro)"</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_NOTICE</span><span style="color: #007700">);
            </span><span style="color: #0000BB">$value </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;
        }
        </span><span style="color: #0000BB">$temp</span><span style="color: #007700">[</span><span style="color: #0000BB">$pos</span><span style="color: #007700">] = </span><span style="color: #0000BB">log</span><span style="color: #007700">(</span><span style="color: #0000BB">$scale</span><span style="color: #007700">) * </span><span style="color: #0000BB">$value</span><span style="color: #007700">;
    }
    return </span><span style="color: #0000BB">$temp</span><span style="color: #007700">;
  }

</span><span style="color: #FF8000">// Configuration du gestionnaire d'erreurs
</span><span style="color: #0000BB">$old_error_handler </span><span style="color: #007700">= </span><span style="color: #0000BB">set_error_handler</span><span style="color: #007700">(</span><span style="color: #DD0000">"myErrorHandler"</span><span style="color: #007700">);

</span><span style="color: #FF8000">// Génération de quelques erreurs. Commençons par créer un tableau
</span><span style="color: #007700">echo </span><span style="color: #DD0000">"vector a\n"</span><span style="color: #007700">;
</span><span style="color: #0000BB">$a </span><span style="color: #007700">= array(</span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #DD0000">"foo"</span><span style="color: #007700">, </span><span style="color: #0000BB">5.5</span><span style="color: #007700">, </span><span style="color: #0000BB">43.3</span><span style="color: #007700">, </span><span style="color: #0000BB">21.11</span><span style="color: #007700">);
</span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);

</span><span style="color: #FF8000">// Générons maintenant un second tableau
</span><span style="color: #007700">echo </span><span style="color: #DD0000">"----\nvector b - a notice (b = log(PI) * a)\n"</span><span style="color: #007700">;
</span><span style="color: #FF8000">/* La valeur à la position $pos n'est pas un nombre, utilisation 0 (zéro) */
</span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">scale_by_log</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">M_PI</span><span style="color: #007700">);
</span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$b</span><span style="color: #007700">);

</span><span style="color: #FF8000">// Ceci est un problème, nous avons utilisé une chaîne au lieu d'un tableau
</span><span style="color: #007700">echo </span><span style="color: #DD0000">"----\nvector c - a warning\n"</span><span style="color: #007700">;
</span><span style="color: #FF8000">/* Type d'entrée incorrect, tableau de valeurs attendu */
</span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">scale_by_log</span><span style="color: #007700">(</span><span style="color: #DD0000">"non un tableau"</span><span style="color: #007700">, </span><span style="color: #0000BB">2.3</span><span style="color: #007700">);
</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$c</span><span style="color: #007700">); </span><span style="color: #FF8000">// NULL

// Ceci est une erreur critique : le logarithme de zéro ou d'un nombre négatif est indéfini
</span><span style="color: #007700">echo </span><span style="color: #DD0000">"----\nvector d - fatal error\n"</span><span style="color: #007700">;
</span><span style="color: #FF8000">/* log(x) pour x &lt;= 0 est indéfini, valeur utilisée : scale = $scale" */
</span><span style="color: #0000BB">$d </span><span style="color: #007700">= </span><span style="color: #0000BB">scale_by_log</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, -</span><span style="color: #0000BB">2.5</span><span style="color: #007700">);
</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$d</span><span style="color: #007700">); </span><span style="color: #FF8000">// Jamais atteint
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
    </div>

    <div class="example-contents"><p>Résultat de l&#039;exemple ci-dessus est similaire à :</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">vector a
Array
(
    [0] =&gt; 2
    [1] =&gt; 3
    [2] =&gt; foo
    [3] =&gt; 5.5
    [4] =&gt; 43.3
    [5] =&gt; 21.11
)
----
vector b - a notice (b = log(PI) * a)
&lt;b&gt;Mon AVERTISSEMENT&lt;/b&gt; [1024] La valeur à la position 2 n&#039;est pas un nombre, utilisation 0 (zéro)&lt;br /&gt;
Array
(
    [0] =&gt; 2.2894597716988
    [1] =&gt; 3.4341896575482
    [2] =&gt; 0
    [3] =&gt; 6.2960143721717
    [4] =&gt; 49.566804057279
    [5] =&gt; 24.165247890281
)
----
vector c - a warning
&lt;b&gt;Mon ALERTE&lt;/b&gt; [512] Type d&#039;entrée incorrect, tableau de valeurs attendu&lt;br /&gt;
NULL
----
vector d - fatal error
&lt;b&gt;Mon ERREUR&lt;/b&gt; [256] log(x) pour x &lt;= 0 est indéfini, valeur utilisée : scale = -2.5&lt;br /&gt;
  Erreur fatale sur la ligne 36 dans le fichier trigger_error.php, PHP 5.2.1 (Linux)&lt;br /&gt;
Arrêt...&lt;br /&gt;</pre>
</div>
    </div>
   </div>
  </p>
  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Exemple #2 Appel du gestionnaire précédent depuis le nouveau</strong></p>
    <div class="example-contents"><p>
     La valeur de retour de <span class="function"><strong>set_error_handler()</strong></span> est le
     gestionnaire qui était actif jusqu&#039;alors. L&#039;appeler depuis le nouveau
     gestionnaire conserve le comportement existant tout en le complétant.
     Cela ne fonctionne que si ce gestionnaire est une fonction utilisateur ;
     <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> est retourné lorsque le gestionnaire interne était actif.
    </p></div>
    <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">logging_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">int $errno</span><span style="color: #007700">, </span><span style="color: #0000BB">string $errstr</span><span style="color: #007700">): </span><span style="color: #0000BB">bool
</span><span style="color: #007700">{
    echo </span><span style="color: #DD0000">"journalisé : </span><span style="color: #0000BB">$errstr</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;
    return </span><span style="color: #0000BB">true</span><span style="color: #007700">;
}

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

</span><span style="color: #0000BB">$previous </span><span style="color: #007700">= </span><span style="color: #0000BB">set_error_handler</span><span style="color: #007700">(function (</span><span style="color: #0000BB">int $errno</span><span style="color: #007700">, </span><span style="color: #0000BB">string $errstr</span><span style="color: #007700">) use (&amp;</span><span style="color: #0000BB">$previous</span><span style="color: #007700">): </span><span style="color: #0000BB">bool </span><span style="color: #007700">{
    echo </span><span style="color: #DD0000">"compté : </span><span style="color: #0000BB">$errstr</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;
    return </span><span style="color: #0000BB">$previous </span><span style="color: #007700">!== </span><span style="color: #0000BB">null </span><span style="color: #007700">? </span><span style="color: #0000BB">$previous</span><span style="color: #007700">(</span><span style="color: #0000BB">$errno</span><span style="color: #007700">, </span><span style="color: #0000BB">$errstr</span><span style="color: #007700">) : </span><span style="color: #0000BB">false</span><span style="color: #007700">;
});

</span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"quelque chose s'est produit"</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_WARNING</span><span style="color: #007700">);

</span><span style="color: #0000BB">restore_error_handler</span><span style="color: #007700">();
</span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"seulement journalisé maintenant"</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_WARNING</span><span style="color: #007700">);

</span><span style="color: #0000BB">restore_error_handler</span><span style="color: #007700">();
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
    </div>

    <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
    <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">compté : quelque chose s&#039;est produit
journalisé : quelque chose s&#039;est produit
journalisé : seulement journalisé maintenant</pre>
</div>
    </div>
   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.set-error-handler-notes">
  <h3 class="title">Notes</h3>
  <div class="caution"><strong class="caution">Attention</strong>
   <p class="simpara">
    Il ne faut pas revenir au gestionnaire précédent en repassant à
    <span class="function"><strong>set_error_handler()</strong></span> sa valeur de retour.
    Cela empile une entrée supplémentaire au lieu d&#039;en retirer une, si bien que
    la pile croît sans limite dans les boucles et les processus de longue durée,
    et <code class="parameter">error_levels</code> est réinitialisé à
    <strong><code><a href="errorfunc.constants.php#constant.e-all">E_ALL</a></code></strong>, élargissant silencieusement la plage des erreurs
    que reçoit le gestionnaire restauré.
    <span class="function"><a href="function.restore-error-handler.php" class="function">restore_error_handler()</a></span> est la façon prévue de revenir
    au gestionnaire précédent.
   </p>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.set-error-handler-seealso">
  <h3 class="title">Voir aussi</h3>
  <ul class="simplelist">
   <li><span class="exceptionname"><a href="class.errorexception.php" class="exceptionname">ErrorException</a></span></li>
   <li><span class="function"><a href="function.error-reporting.php" class="function" rel="rdfs-seeAlso">error_reporting()</a> - Fixe le niveau de rapport d'erreurs PHP</span></li>
   <li><span class="function"><a href="function.restore-error-handler.php" class="function" rel="rdfs-seeAlso">restore_error_handler()</a> - R&eacute;active l'ancienne fonction de gestion des erreurs</span></li>
   <li><span class="function"><a href="function.get-error-handler.php" class="function" rel="rdfs-seeAlso">get_error_handler()</a> - Renvoie la fonction de gestion d'erreur d&eacute;finie par l'utilisateur</span></li>
   <li><span class="function"><a href="function.trigger-error.php" class="function" rel="rdfs-seeAlso">trigger_error()</a> - D&eacute;clenche une erreur utilisateur</span></li>
   <li><a href="errorfunc.constants.php" class="link">Constantes de niveau d&#039;erreur</a></li>
  </ul>
 </div>

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