<?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.arguments.php',
    1 => 'Param&egrave;tres et arguments de fonction',
    2 => 'Param&egrave;tres et arguments de fonction',
  ),
  'up' => 
  array (
    0 => 'language.functions.php',
    1 => 'Les fonctions',
  ),
  'prev' => 
  array (
    0 => 'functions.user-defined.php',
    1 => 'Les fonctions d&eacute;finies par l\'utilisateur',
  ),
  'next' => 
  array (
    0 => 'functions.returning-values.php',
    1 => 'Les valeurs de retour',
  ),
  '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.arguments" class="sect1">
  <h2 class="title">Paramètres et arguments de fonction</h2>
  <p class="simpara">
   Les paramètres de la fonction sont déclarés dans la signature de la fonction.
   Des informations peuvent être passées à
   une fonction en utilisant une liste d&#039;arguments, dont chaque
   expression est séparée par une virgule. Les arguments seront
   évalués de gauche à droite, et le résultat est assigné aux paramètres de
   la fonction, avant que la fonction ne soit effectivement appelée
   (évaluation <em>immédiate</em>).
  </p>
  
  <p class="para">
   PHP supporte le passage d&#039;arguments par valeur (comportement par défaut), <a href="functions.arguments.php#functions.arguments.by-reference" class="link">le passage par référence</a>, et <a href="functions.arguments.php#functions.arguments.default" class="link">des valeurs d&#039;arguments par défaut</a>.
   Une <a href="functions.arguments.php#functions.variable-arg-list" class="link">liste variable d&#039;arguments</a>,
   ainsi que les <a href="functions.arguments.php#functions.named-arguments" class="link">Arguments Nommés</a>
   sont également supportés.
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    À partir de PHP 7.3.0, il est possible d&#039;avoir une virgule finale dans la liste d&#039;arguments
    pour les appels de fonction :
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$v </span><span style="color: #007700">= </span><span style="color: #0000BB">foo</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">$arg_1</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$arg_2</span><span style="color: #007700">,<br />);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

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

   <p class="para">
    À partir de PHP 8.0.0, la liste des arguments de fonction peut inclure une
    virgule finale, qui sera ignorée. Ceci est particulièrement pratique dans
    les cas où la liste d&#039;arguments est longue ou contient des noms de variables
    longs, ce qui rend pratique de lister les paramètres verticalement.
   </p>
   <div class="example" id="example-1">
    <p><strong>Exemple #1 Liste des paramètres de la fonction avec une virgule finale</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">takes_many_args</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">$first_arg</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$second_arg</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$a_very_long_argument_name</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$arg_with_default </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$again </span><span style="color: #007700">= </span><span style="color: #DD0000">'a default string'</span><span style="color: #007700">, </span><span style="color: #FF8000">// Cette virgule finale n'était pas permise avant 8.0.0.<br /></span><span style="color: #007700">)<br />{<br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

  <div class="sect2" id="functions.arguments.by-reference">
   <h3 class="title">Passage d&#039;arguments par référence</h3>
   
   <p class="simpara">
    Par défaut, les arguments sont passés
    à la fonction par valeur (aussi, changer la valeur d&#039;un argument dans la fonction ne
    change pas sa valeur à l&#039;extérieur de la fonction). Pour que les fonctions
    puissent changer la valeur des arguments, il faut passer ces arguments par référence.
   </p>
   <p class="para">
    Pour qu&#039;un argument soit toujours passé
    par référence, il suffit d&#039;ajouter un &#039;<code class="literal">&amp;</code>&#039;
    devant le paramètre dans la déclaration de la fonction :
   </p>
   <p class="para">
    <div class="example" id="example-2">
     <p><strong>Exemple #2 Passage des arguments de fonction par référence</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">add_some_extra</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$string</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">$string </span><span style="color: #007700">.= </span><span style="color: #DD0000">', et un peu plus.'</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Ceci est une chaîne'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">add_some_extra</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$str</span><span style="color: #007700">; </span><span style="color: #FF8000">// Affiche : 'Ceci est une chaîne, et un peu plus.'<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    Il est incorrect de passer une expression constante comme argument à un paramètre
    qui attend d&#039;être passé par référence.
   </p>
  </div>
  
  <div class="sect2" id="functions.arguments.default">
   <h3 class="title">Valeurs par défaut des paramètres</h3>
   
   <p class="para">
    Une fonction peut définir des valeurs par défaut pour les paramètres en utilisant une syntaxe similaire
    à celle de l&#039;affectation d&#039;une variable. La valeur par défaut est utilisée uniquement lorsque l&#039;argument du paramètre n&#039;est
    pas passé. Il est à noter que passer <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> ne <em>définit pas</em>
    la valeur par défaut.
   </p>
   <p class="para">
    <div class="example" id="example-3">
     <p><strong>Exemple #3 Valeur par défaut des arguments de fonctions</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">servir_cafe </span><span style="color: #007700">(</span><span style="color: #0000BB">$type </span><span style="color: #007700">= </span><span style="color: #DD0000">"cappuccino"</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Servir un </span><span style="color: #0000BB">$type</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br />echo </span><span style="color: #0000BB">servir_cafe</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">servir_cafe</span><span style="color: #007700">(</span><span style="color: #0000BB">null</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">servir_cafe</span><span style="color: #007700">(</span><span style="color: #DD0000">"espresso"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
Servir un cappuccino.
Servir un .
Servir un espresso.
</pre></div>
     </div>
    </div>
   </p>
   <p class="para">
    Les valeurs par défaut des paramètres peuvent être des valeurs scalaires,
    des <a href="language.types.array.php" class="link">tableau</a>s, le type spécial <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, et à partir de PHP 8.1.0,
    des objets utilisant la syntaxe <a href="language.oop5.basic.php#language.oop5.basic.new" class="link">new ClassName()</a>.
   </p>
   <p class="para">
    <div class="example" id="example-4">
     <p><strong>Exemple #4 Utilisation de type non-scalaire comme valeur par défaut</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">servir_cafe</span><span style="color: #007700">(</span><span style="color: #0000BB">$types </span><span style="color: #007700">= array(</span><span style="color: #DD0000">"cappuccino"</span><span style="color: #007700">), </span><span style="color: #0000BB">$coffeeMaker </span><span style="color: #007700">= </span><span style="color: #0000BB">NULL</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">$device </span><span style="color: #007700">= </span><span style="color: #0000BB">is_null</span><span style="color: #007700">(</span><span style="color: #0000BB">$coffeeMaker</span><span style="color: #007700">) ? </span><span style="color: #DD0000">"les mains" </span><span style="color: #007700">: </span><span style="color: #0000BB">$coffeeMaker</span><span style="color: #007700">;<br />    return </span><span style="color: #DD0000">"Préparation d'une tasse de "</span><span style="color: #007700">.</span><span style="color: #0000BB">join</span><span style="color: #007700">(</span><span style="color: #DD0000">", "</span><span style="color: #007700">, </span><span style="color: #0000BB">$types</span><span style="color: #007700">).</span><span style="color: #DD0000">" avec </span><span style="color: #0000BB">$device</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br />echo </span><span style="color: #0000BB">servir_cafe</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">servir_cafe</span><span style="color: #007700">(array(</span><span style="color: #DD0000">"cappuccino"</span><span style="color: #007700">, </span><span style="color: #DD0000">"lavazza"</span><span style="color: #007700">), </span><span style="color: #DD0000">"une cafetière"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Préparation d&#039;une tasse de cappuccino avec les mains.
Préparation d&#039;une tasse de cappuccino, lavazza avec une cafetière.
</pre></div>
      </div>
    </div>
   </p>
    <p class="para">
      <div class="example" id="example-5">
        <p><strong>Exemple #5 Utilisation d&#039;objets comme valeurs par défaut (à partir de PHP 8.1.0)</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">class </span><span style="color: #0000BB">DefaultCoffeeMaker </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">brew</span><span style="color: #007700">() {<br />        return </span><span style="color: #DD0000">'Faire du café.\n'</span><span style="color: #007700">;<br />    }<br />}<br />class </span><span style="color: #0000BB">FancyCoffeeMaker </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">brew</span><span style="color: #007700">() {<br />        return </span><span style="color: #DD0000">'Créer un beau café rien que pour vous.\n'</span><span style="color: #007700">;<br />    }<br />}<br />function </span><span style="color: #0000BB">makecoffee</span><span style="color: #007700">(</span><span style="color: #0000BB">$coffeeMaker </span><span style="color: #007700">= new </span><span style="color: #0000BB">DefaultCoffeeMaker</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #0000BB">$coffeeMaker</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">brew</span><span style="color: #007700">();<br />}<br />echo </span><span style="color: #0000BB">makecoffee</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">makecoffee</span><span style="color: #007700">(new </span><span style="color: #0000BB">FancyCoffeeMaker</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>


      <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Faire du café.
Créer un beau café rien que pour vous.
</pre></div>
      </div>
      </div>
    </p>
   <p class="simpara">
    La valeur par défaut d&#039;un argument doit
    obligatoirement être une constante, et ne peut être
    ni une variable, ni un membre de classe, ni un appel de fonction.
   </p>
   <p class="para">
    Il est à noter que tous les paramètres optionnels doivent être spécifiés après les
    paramètres obligatoires, sinon ils ne peuvent pas être omis dans les appels.
    Considérons le code suivant :
   </p>
   <p class="para">
    <div class="example" id="example-6">
     <p><strong>Exemple #6 Utilisation incorrecte des paramètres de fonction par défaut</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">faireunyaourt </span><span style="color: #007700">(</span><span style="color: #0000BB">$container </span><span style="color: #007700">= </span><span style="color: #DD0000">"bol"</span><span style="color: #007700">, </span><span style="color: #0000BB">$flavour</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Préparer un </span><span style="color: #0000BB">$container</span><span style="color: #DD0000"> de yaourt à la </span><span style="color: #0000BB">$flavour</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br /> <br />echo </span><span style="color: #0000BB">faireunyaourt</span><span style="color: #007700">(</span><span style="color: #DD0000">"framboise"</span><span style="color: #007700">);   </span><span style="color: #FF8000">// "framboise" est $container, pas $flavour<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function faireunyaourt(), 1 passed in example.php on line 42
</pre></div>
     </div>
    </div>
   </p>
   <p class="para">
    Maintenant comparons l&#039;exemple précédent avec l&#039;exemple suivant :
   </p>
   <p class="para">
    <div class="example" id="example-7">
     <p><strong>Exemple #7 Utilisation correcte des paramètres de fonction par défaut</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">faireunyaourt </span><span style="color: #007700">(</span><span style="color: #0000BB">$flavour</span><span style="color: #007700">, </span><span style="color: #0000BB">$container </span><span style="color: #007700">= </span><span style="color: #DD0000">"bol"</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Préparer un </span><span style="color: #0000BB">$container</span><span style="color: #DD0000"> de yaourt à la </span><span style="color: #0000BB">$flavour</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br /> <br />echo </span><span style="color: #0000BB">faireunyaourt </span><span style="color: #007700">(</span><span style="color: #DD0000">"framboise"</span><span style="color: #007700">);   </span><span style="color: #FF8000">// "framboise" est $flavour<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
Préparer un bol de yaourt à la framboise.
</pre></div>
     </div>
    </div>
   </p>
    <p class="para">
      À partir de PHP 8.0.0, les <a href="functions.arguments.php#functions.named-arguments" class="link">arguments nommés</a>
      peuvent être utilisés pour passer outre plusieurs paramètres optionnels.
    </p>
    <p class="para">
     <div class="example" id="example-8">
      <p><strong>Exemple #8 Utilisation correcte des paramètres de fonction par défaut</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">faireunyaourt</span><span style="color: #007700">(</span><span style="color: #0000BB">$container </span><span style="color: #007700">= </span><span style="color: #DD0000">"bol"</span><span style="color: #007700">, </span><span style="color: #0000BB">$flavour </span><span style="color: #007700">= </span><span style="color: #DD0000">"framboise"</span><span style="color: #007700">, </span><span style="color: #0000BB">$style </span><span style="color: #007700">= </span><span style="color: #DD0000">"Grec"</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Préparer un </span><span style="color: #0000BB">$container</span><span style="color: #DD0000"> de yaourt </span><span style="color: #0000BB">$style</span><span style="color: #DD0000"> à la </span><span style="color: #0000BB">$flavour</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br />echo </span><span style="color: #0000BB">faireunyaourt</span><span style="color: #007700">(</span><span style="color: #0000BB">style</span><span style="color: #007700">: </span><span style="color: #DD0000">"naturel"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Préparer un bol de yaourt naturel à la framboise.
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
      À partir de PHP 8.0.0, déclarer des paramètres obligatoires après des arguments optionnels est <em>obsolète</em>.
      Ce problème peut généralement être résolu en abandonnant la valeur par défaut, puisqu&#039;elle ne sera jamais utilisée.
      Une exception à cette règle concerne les paramètres de la forme <code class="code">Type $param = null</code>,
      où le <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> par défaut rend le type implicitement nullable.
      Cet usage est déprécié à partir de PHP 8.4.0, et un
      <a href="language.types.declarations.php#language.types.declarations.nullable" class="link">type nullable</a>
      explicite doit être utilisé à la place.
      <div class="example" id="example-9">
       <p><strong>Exemple #9 Déclaration des paramètres optionnels après les paramètres obligatoires</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">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">= [], </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {}     </span><span style="color: #FF8000">// Valeur par défaut non utilisée ; déconseillée à partir de PHP 8.0.0<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {}          </span><span style="color: #FF8000">// Fonctionnellement équivalent, pas d’avertissement de dépréciation<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">bar</span><span style="color: #007700">(</span><span style="color: #0000BB">A $a </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {} </span><span style="color: #FF8000">// À partir de PHP 8.1.0, $a est implicitement requis<br />                                 // (car il précède un paramètre requis),<br />                                 // mais implicitement nullable (déconseillé à partir de PHP 8.4.0),<br />                                 // car la valeur par défaut du paramètre est null<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">bar</span><span style="color: #007700">(?</span><span style="color: #0000BB">A $a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {}       </span><span style="color: #FF8000">// Recommandé<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>

      </div>
    </p>
    <blockquote class="note"><p><strong class="note">Note</strong>: 
      <span class="simpara">
        À partir de PHP 7.1.0, l&#039;omission d&#039;un paramètre qui ne spécifie pas une valeur par défaut lance
        un <span class="classname"><a href="class.argumentcounterror.php" class="classname">ArgumentCountError</a></span> ;
        dans les versions précédentes, cela levait un avertissement.
      </span>
    </p></blockquote>
   <blockquote class="note"><p><strong class="note">Note</strong>: 
    <span class="simpara">
     Les arguments passés par référence peuvent avoir
     une valeur par défaut.
    </span>
   </p></blockquote>   
  </div>
  
  <div class="sect2" id="functions.variable-arg-list">
   <h3 class="title">Liste d&#039;argument à nombre variable</h3>
   
   <p class="simpara">
    PHP supporte les arguments à nombre variable dans les
    fonctions définies par l&#039;utilisateur en utilisant le token
    <code class="literal">...</code>.
   </p>

   <p class="para">
    La liste des arguments peut inclure le
    token <code class="literal">...</code> pour indiquer que cette fonction accepte
    un nombre variable d&#039;arguments. Les arguments seront passés dans la variable
    fournie sous forme d&#039;un <a href="language.types.array.php" class="link">tableau</a>:
     
    <div class="example" id="example-10">
     <p><strong>Exemple #10 Utilisation de <code class="literal">...</code> pour accéder aux arguments variables</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">sum</span><span style="color: #007700">(...</span><span style="color: #0000BB">$numbers</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$acc </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />    foreach (</span><span style="color: #0000BB">$numbers </span><span style="color: #007700">as </span><span style="color: #0000BB">$n</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$acc </span><span style="color: #007700">+= </span><span style="color: #0000BB">$n</span><span style="color: #007700">;<br />    }<br />    return </span><span style="color: #0000BB">$acc</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">sum</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </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: #0000BB">4</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
10
</pre></div>
     </div>
    </div>
   </p>

   <p class="para">
    <code class="literal">...</code> peut aussi être utilisé lors des appels de
    fonctions pour extraire le <a href="language.types.array.php" class="link">tableau</a> ou la variable
    <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span> ou le littéral dans la liste d&#039;arguments :
     
    <div class="example" id="example-11">
     <p><strong>Exemple #11 Utilisation de <code class="literal">...</code> pour fournir des arguments</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">add</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {<br />    return </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">add</span><span style="color: #007700">(...[</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">]).</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= [</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">];<br />echo </span><span style="color: #0000BB">add</span><span style="color: #007700">(...</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
3
3
</pre></div>
     </div>
    </div>
   </p>
    
   <p class="para">
    Il est possible de spécifier des paramètres classiques avant le mot clé
    <code class="literal">...</code>. Dans ce cas, seuls les arguments finaux
    qui ne correspondent pas à un argument classique seront ajoutés
    au tableau généré par <code class="literal">...</code>.
   </p>
    
   <p class="para">
    Il est également possible d&#039;ajouter une
    <a href="language.types.declarations.php" class="link">déclaration de type</a>
    avant le jeton <code class="literal">...</code>. Si ceci est présent,
    alors tous les arguments capturés par <code class="literal">...</code>
    doivent correspondre au type de paramètre.
     
    <div class="example" id="example-12">
     <p><strong>Exemple #12 Transtypage d&#039;arguments variables</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">total_intervals</span><span style="color: #007700">(</span><span style="color: #0000BB">$unit</span><span style="color: #007700">, </span><span style="color: #0000BB">DateInterval </span><span style="color: #007700">...</span><span style="color: #0000BB">$intervals</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$time </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />    foreach (</span><span style="color: #0000BB">$intervals </span><span style="color: #007700">as </span><span style="color: #0000BB">$interval</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$time </span><span style="color: #007700">+= </span><span style="color: #0000BB">$interval</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$unit</span><span style="color: #007700">;<br />    }<br />    return </span><span style="color: #0000BB">$time</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateInterval</span><span style="color: #007700">(</span><span style="color: #DD0000">'P1D'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= new </span><span style="color: #0000BB">DateInterval</span><span style="color: #007700">(</span><span style="color: #DD0000">'P2D'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">total_intervals</span><span style="color: #007700">(</span><span style="color: #DD0000">'d'</span><span style="color: #007700">, </span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">).</span><span style="color: #DD0000">' jours'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Ceci échouera, car null n'est pas un objet DateInterval.<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">total_intervals</span><span style="color: #007700">(</span><span style="color: #DD0000">'d'</span><span style="color: #007700">, </span><span style="color: #0000BB">null</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>L&#039;exemple ci-dessus va afficher :</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
3 jours
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
</pre></div>
     </div>
    </div>
   </p>
    
   <p class="para">
    Pour finir, il est possible de passer des arguments variables
    <a href="functions.arguments.php#functions.arguments.by-reference" class="link">par référence</a>
    en préfixant le mot clé <code class="literal">...</code> d&#039;un ET commercial
    (<code class="literal">&amp;</code>).
   </p>

  </div>

  <div class="sect2" id="functions.named-arguments">
   <h3 class="title">Arguments Nommés</h3>

   <p class="para">
    PHP 8.0.0 introduit les arguments nommés comme extension aux paramètres
    positionnels existant. Les arguments nommés permettent de passer les
    arguments à une fonction en s&#039;appuyant sur le nom du paramètre, au lieu de
    la position du paramètre. Ceci documente automatiquement la signification
    de l&#039;argument, rend l&#039;ordre des arguments indépendant et permet d&#039;ignorer
    les valeurs par défaut arbitrairement.
   </p>

   <p class="para">
    Les arguments nommés sont passés en préfixant la valeur avec le nom du
    paramètre suivi d&#039;un deux-points. Utiliser des mots-clés réservés comme
    nom de paramètre est autorisé. Le nom du paramètre doit être un identifiant,
    le spécifiant de façon dynamique n&#039;est pas permis.
   </p>

   <div class="example" id="example-13">
    <p><strong>Exemple #13 Syntaxe des arguments nommés</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />myFunction</span><span style="color: #007700">(</span><span style="color: #0000BB">paramName</span><span style="color: #007700">: </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">array_foobar</span><span style="color: #007700">(array: </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// NON supporté.<br /></span><span style="color: #0000BB">function_name</span><span style="color: #007700">(</span><span style="color: #0000BB">$variableStoringParamName</span><span style="color: #007700">: </span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="example" id="example-14">
    <p><strong>Exemple #14 Arguments positionnels comparés aux arguments nommés</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: #FF8000">// Utilisant les arguments positionnels :<br /></span><span style="color: #0000BB">array_fill</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">100</span><span style="color: #007700">, </span><span style="color: #0000BB">50</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Utilisant les arguments nommés :<br /></span><span style="color: #0000BB">array_fill</span><span style="color: #007700">(</span><span style="color: #0000BB">start_index</span><span style="color: #007700">: </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">count</span><span style="color: #007700">: </span><span style="color: #0000BB">100</span><span style="color: #007700">, </span><span style="color: #0000BB">value</span><span style="color: #007700">: </span><span style="color: #0000BB">50</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    L&#039;ordre dans lequel les arguments nommés sont passés n&#039;importe pas.
   </p>

   <div class="example" id="example-15">
    <p><strong>Exemple #15 Même exemple que ci-dessus, mais avec un ordre de paramètre différent</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />array_fill</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">: </span><span style="color: #0000BB">50</span><span style="color: #007700">, </span><span style="color: #0000BB">count</span><span style="color: #007700">: </span><span style="color: #0000BB">100</span><span style="color: #007700">, </span><span style="color: #0000BB">start_index</span><span style="color: #007700">: </span><span style="color: #0000BB">0</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Les arguments nommés peuvent être combinés avec les arguments positionnels.
    Auquel cas, les arguments nommés doivent venir après les arguments positionnels.
    Il est aussi possible de spécifier seulement certains des arguments optionnels
    d&#039;une fonction, peu importe leur ordre.
   </p>

   <div class="example" id="example-16">
    <p><strong>Exemple #16 Combiner les arguments nommés avec les arguments positionnels</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">, </span><span style="color: #0000BB">double_encode</span><span style="color: #007700">: </span><span style="color: #0000BB">false</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Identique à<br /></span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">, </span><span style="color: #0000BB">ENT_QUOTES </span><span style="color: #007700">| </span><span style="color: #0000BB">ENT_SUBSTITUTE </span><span style="color: #007700">| </span><span style="color: #0000BB">ENT_HTML401</span><span style="color: #007700">, </span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Passer le même argument plusieurs fois résulte en une
    <span class="classname"><a href="class.error.php" class="classname">Error</a></span> exception.
   </p>

   <div class="example" id="example-17">
    <p><strong>Exemple #17 Erreur déclenchée lorsqu&#039;un argument est passé plusieurs fois au même paramètre nommé</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">$param</span><span style="color: #007700">) { ... }<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">param</span><span style="color: #007700">: </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">param</span><span style="color: #007700">: </span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Error: Named parameter $param overwrites previous argument<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">param</span><span style="color: #007700">: </span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Error: Named parameter $param overwrites previous argument<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

    <p class="para">
      À partir de PHP 8.1.0, il est possible d&#039;utiliser des arguments nommés après avoir décompressé les arguments.
      Un argument nommé <em>ne doit pas</em> écraser un argument déjà déballé.
    </p>

    <div class="example" id="example-18">
      <p><strong>Exemple #18 Utiliser les arguments nommés après le déballage</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">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">, </span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">$d </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">) {<br />  return </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b </span><span style="color: #007700">+ </span><span style="color: #0000BB">$c </span><span style="color: #007700">+ </span><span style="color: #0000BB">$d</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(...[</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">], </span><span style="color: #0000BB">d</span><span style="color: #007700">: </span><span style="color: #0000BB">40</span><span style="color: #007700">)); </span><span style="color: #FF8000">// 46<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(...[</span><span style="color: #DD0000">'b' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #DD0000">'a' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">], </span><span style="color: #0000BB">d</span><span style="color: #007700">: </span><span style="color: #0000BB">40</span><span style="color: #007700">)); </span><span style="color: #FF8000">// 46<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(...[</span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">], </span><span style="color: #0000BB">b</span><span style="color: #007700">: </span><span style="color: #0000BB">20</span><span style="color: #007700">)); </span><span style="color: #FF8000">// Erreur fatale. Le paramètre nommé $b écrase l'argument précédent.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

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