<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.functions.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'functions.user-defined.php',
    1 => 'Les fonctions d&eacute;finies par l\'utilisateur',
    2 => 'Les fonctions d&eacute;finies par l\'utilisateur',
  ),
  'up' => 
  array (
    0 => 'language.functions.php',
    1 => 'Les fonctions',
  ),
  'prev' => 
  array (
    0 => 'language.functions.php',
    1 => 'Les fonctions',
  ),
  'next' => 
  array (
    0 => 'functions.arguments.php',
    1 => 'Param&egrave;tres et arguments de fonction',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'language/functions.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="functions.user-defined" class="sect1">
  <h2 class="title">Les fonctions définies par l&#039;utilisateur</h2>
  
  <p class="para">
   Une fonction est définie en utilisant le mot-clé <code class="literal">function</code>,
   un nom, une liste de paramètres (qui peuvent être vides) séparés par des virgules
   (<code class="literal">,</code>) entre parenthèses, suivis du corps de
   la fonction entre accolades, comme suit :
  </p>
  <div class="example" id="example-1">
   <p><strong>Exemple #1 Déclaration d&#039;une nouvelle fonction nommée <code class="literal">foo</code></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">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$arg_1</span><span style="color: #007700">, </span><span style="color: #0000BB">$arg_2</span><span style="color: #007700">, </span><span style="color: #FF8000">/* ..., */ </span><span style="color: #0000BB">$arg_n</span><span style="color: #007700">)<br />{<br />    echo </span><span style="color: #DD0000">"Exemple de fonction.\n"</span><span style="color: #007700">;<br />    return </span><span style="color: #0000BB">$retval</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    À partir de PHP 8.0.0, la liste de paramètres peut avoir une virgule finale :
    <div class="informalexample">
     <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">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$arg_1</span><span style="color: #007700">, </span><span style="color: #0000BB">$arg_2</span><span style="color: #007700">,) { }<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </p></blockquote>
  
  <p class="simpara">
   Tout code PHP valide peut apparaître à l&#039;intérieur du corps d&#039;une fonction, y compris d&#039;autres
   fonctions et des définitions de
   <a href="language.oop5.basic.php#language.oop5.basic.class" class="link">classe</a>.
  </p>
  <p class="para">
   Les noms de fonctions suivent les mêmes règles que les autres labels en PHP.
   Un nom de fonction valide commence par une lettre ou un souligné, suivi
   par un nombre quelconque de lettres, de nombres ou de soulignés.
   Ces règles peuvent être représentées par l&#039;expression rationnelle suivante :
   <code class="code">^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$</code>
  </p>
  <div class="tip"><strong class="tip">Astuce</strong><p class="simpara">
 Jetez un oeil sur <a href="userlandnaming.php" class="xref">Guide de nommage de l'espace utilisateur</a>.
</p></div>
  <p class="simpara">
   Les fonctions n&#039;ont pas besoin d&#039;être définies avant d&#039;être utilisées,
   <em>SAUF</em> lorsqu&#039;une fonction est définie
   conditionnellement, comme montré dans les deux exemples suivants.
  </p>
  <p class="para">
   Lorsqu&#039;une fonction est définie de manière conditionnelle, comme dans
   les exemples ci-dessous, leur définition doit <em>précéder</em>
   leur utilisation.
  </p>
  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Exemple #2 Fonctions conditionnelles</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$makefoo </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Impossible d'appeler foo() ici,<br />   car cette fonction n'existe pas.<br />   Mais nous pouvons utiliser bar() */<br /><br /></span><span style="color: #0000BB">bar</span><span style="color: #007700">();<br /><br />if (</span><span style="color: #0000BB">$makefoo</span><span style="color: #007700">) {<br />  function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />  {<br />    echo </span><span style="color: #DD0000">"Je n'existe pas tant que le programme n'est pas passé ici.\n"</span><span style="color: #007700">;<br />  }<br />}<br /><br /></span><span style="color: #FF8000">/* Maintenant, nous pouvons appeler foo()<br />   car $makefoo est évalué à vrai */<br /><br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">$makefoo</span><span style="color: #007700">) </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /><br />function </span><span style="color: #0000BB">bar</span><span style="color: #007700">()<br />{<br />  echo </span><span style="color: #DD0000">"J'existe dès le début du programme.\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   <div class="example" id="example-3">
    <p><strong>Exemple #3 Fonctions dans une autre fonction</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">foo</span><span style="color: #007700">() <br />{<br />  function </span><span style="color: #0000BB">bar</span><span style="color: #007700">() <br />  {<br />    echo </span><span style="color: #DD0000">"Je n'existe pas tant que foo() n'est pas appelé.\n"</span><span style="color: #007700">;<br />  }<br />}<br /><br /></span><span style="color: #FF8000">/* Impossible d'appeler bar() ici<br />   car il n'existe pas. */<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">/* Maintenant, nous pouvons appeler bar(),<br />   car l'utilisation de foo() l'a rendue<br />   accessible. */<br /><br /></span><span style="color: #0000BB">bar</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   Toutes les fonctions et classes en PHP ont une portée globale - elles
   peuvent être appelées à l&#039;extérieur d&#039;une fonction si elles ont été définies
   à l&#039;intérieur et vice-versa.
  </p>
  <p class="simpara">
   PHP ne supporte pas la surcharge, la destruction et la redéfinition de
   fonctions déjà déclarées.
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <span class="simpara">
    Les noms de fonctions sont insensibles à la casse pour les caractères ASCII
    <code class="literal">A</code> à <code class="literal">Z</code>,
    et il est généralement admis que les fonctions doivent
    être appelées avec le nom utilisé dans leur déclaration,
    y compris la casse.
   </span>
  </p></blockquote>
  <p class="simpara">
   Les <a href="functions.arguments.php#functions.variable-arg-list" class="link">
   listes variables d&#039;arguments de fonction</a> et les
   <a href="functions.arguments.php#functions.arguments.default" class="link">valeurs par défaut
    d&#039;arguments</a> sont supportés : voir
   les fonctions de références que sont 
   <span class="function"><a href="function.func-num-args.php" class="function">func_num_args()</a></span>,
   <span class="function"><a href="function.func-get-arg.php" class="function">func_get_arg()</a></span>, et
   <span class="function"><a href="function.func-get-args.php" class="function">func_get_args()</a></span> pour plus d&#039;informations.
  </p>
  <p class="para">
   Il est possible d&#039;appeler des fonctions récursives en PHP.
   <div class="example" id="example-4">
    <p><strong>Exemple #4 Fonctions récursives</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">recursion</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">)<br />{<br />    if (</span><span style="color: #0000BB">$a </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">20</span><span style="color: #007700">) {<br />        echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$a</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">recursion</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <blockquote class="note"><p><strong class="note">Note</strong>: 
    <span class="simpara">
     Les appels de méthodes/fonctions récursives avec 100-200 degrés de 
     récursivité peuvent remplir la pile et ainsi, terminer le script courant. 
     À noter qu&#039;une récursion infinie est considérée comme une erreur de
     programmation.
    </span>
   </p></blockquote>
  </p>
  
 </div><?php manual_footer($setup); ?>