<?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.arrow.php',
    1 => 'Fonction Fl&eacute;ch&eacute;e',
    2 => 'Fonction Fl&eacute;ch&eacute;e',
  ),
  'up' => 
  array (
    0 => 'language.functions.php',
    1 => 'Les fonctions',
  ),
  'prev' => 
  array (
    0 => 'functions.anonymous.php',
    1 => 'Fonctions anonymes',
  ),
  'next' => 
  array (
    0 => 'functions.first_class_callable_syntax.php',
    1 => 'Syntaxe callable de premi&egrave;re classe',
  ),
  '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.arrow" class="sect1">
   <h2 class="title">Fonction Fléchée</h2>

   <p class="simpara">
    Les fonctions fléchées ont été introduites en PHP 7.4 en tant que syntaxe
    plus concise pour les
    <a href="functions.anonymous.php" class="link">fonctions anonymes</a>.
   </p>
   <p class="simpara">
    Les fonctions anonymes comme les fonctions fléchées sont implémentées en
    utilisant la classe
    <a href="class.closure.php" class="link"><span class="classname"><a href="class.closure.php" class="classname">Closure</a></span></a>.
   </p>

   <p class="simpara">
    Les fonctions fléchées ont la forme basique
    <code class="code">fn (argument_list) =&gt; expr</code>.
   </p>

   <p class="simpara">
    Les fonctions fléchées supportent les mêmes fonctionnalités que les
    <a href="functions.anonymous.php" class="link">fonctions anonymes</a>,
    à l&#039;exception que l&#039;utilisation des variables de la portée parente est
    automatique.
   </p>

   <p class="simpara">
    Quand une variable utilisée dans l&#039;expression est définie dans la portée
    parente, elle sera implicitement capturée par valeur.
    Dans l&#039;exemple suivant, les fonctions <var class="varname">$fn1</var> et
    <var class="varname">$fn2</var> se comportent de façon identique. 
   </p>

   <p class="para">
    <div class="example" id="example-1">
     <p><strong>Exemple #1 Les fonctions fléchées capturent les variables par valeur automatiquement</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$y </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /> <br /></span><span style="color: #0000BB">$fn1 </span><span style="color: #007700">= fn(</span><span style="color: #0000BB">$x</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">$x </span><span style="color: #007700">+ </span><span style="color: #0000BB">$y</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// équivalent à utiliser $y par valeur :<br /></span><span style="color: #0000BB">$fn2 </span><span style="color: #007700">= function (</span><span style="color: #0000BB">$x</span><span style="color: #007700">) use (</span><span style="color: #0000BB">$y</span><span style="color: #007700">) {<br />    return </span><span style="color: #0000BB">$x </span><span style="color: #007700">+ </span><span style="color: #0000BB">$y</span><span style="color: #007700">;<br />};<br /><br /></span><span style="color: #0000BB">var_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$fn1</span><span style="color: #007700">(</span><span style="color: #0000BB">3</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>
4
</pre></div>
      </div>
    </div>
   </p>
   <p class="simpara">
    Ceci fonctionne aussi si les fonctions fléchées sont imbriquées : 
   </p>
   <p class="para">
    <div class="example" id="example-2">
     <p><strong>Exemple #2 Les fonctions fléchées capturent les variables par valeur automatiquement, même imbriquées</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$z </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$fn </span><span style="color: #007700">= fn(</span><span style="color: #0000BB">$x</span><span style="color: #007700">) =&gt; fn(</span><span style="color: #0000BB">$y</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">$x </span><span style="color: #007700">* </span><span style="color: #0000BB">$y </span><span style="color: #007700">+ </span><span style="color: #0000BB">$z</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">// Affiche 51<br /></span><span style="color: #0000BB">var_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$fn</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">)(</span><span style="color: #0000BB">10</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="simpara">
    Similairement aux fonctions anonymes,
    la syntaxe des fonctions fléchées permet les signatures de fonction arbitraire,
    ceci inclus les types de paramètres et de retour, valeur par défaut, variable,
    aussi bien que le passage et retour par référence.
    Tous les exemples suivants sont des fonctions fléchées valides :
   </p>
   <p class="para">
    <div class="example" id="example-3">
     <p><strong>Exemple #3 Exemples de fonctions fléchées</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">fn(array </span><span style="color: #0000BB">$x</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">$x</span><span style="color: #007700">;<br />static fn(</span><span style="color: #0000BB">$x</span><span style="color: #007700">): </span><span style="color: #0000BB">int </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$x</span><span style="color: #007700">;<br />fn(</span><span style="color: #0000BB">$x </span><span style="color: #007700">= </span><span style="color: #0000BB">42</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">$x</span><span style="color: #007700">;<br />fn(&amp;</span><span style="color: #0000BB">$x</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">$x</span><span style="color: #007700">;<br />fn&amp;(</span><span style="color: #0000BB">$x</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">$x</span><span style="color: #007700">;<br />fn(</span><span style="color: #0000BB">$x</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$rest</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">$rest</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="simpara">
    Les fonctions fléchées lient les variables par valeur.
    Ceci est à peu près équivalent à effectuer un <code class="code">use($x)</code> pour
    chaque variable <var class="varname">$x</var> utilisée à l&#039;intérieur de la fonction
    fléchée.
    Un liage par valeur signifie qu&#039;il n&#039;est pas possible de modifier une
    valeur de la portée extérieure.
    <a href="functions.anonymous.php" class="link">Les fonctions anonymes</a>
    peuvent être utilisées à la place pour des liaisons par référence.
   </p>
   <p class="para">
    <div class="example" id="example-4">
     <p><strong>Exemple #4 
      Valeurs de la portée extérieure ne peuvent pas être modifiées par les fonctions fléchées
     </strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$x </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$fn </span><span style="color: #007700">= fn() =&gt; </span><span style="color: #0000BB">$x</span><span style="color: #007700">++; </span><span style="color: #FF8000">// N'a aucun effet<br /></span><span style="color: #0000BB">$fn</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">var_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$x</span><span style="color: #007700">);  </span><span style="color: #FF8000">// Affiche 1<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   
   <div class="sect2">
    <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>7.4.0</td>
         <td>
          Les fonctions fléchées sont désormais disponibles.
         </td>
        </tr>

       </tbody>
      
     </table>

    </p>
   </div>

   <div class="sect2">
    <h3 class="title">Notes</h3>
    <blockquote class="note"><p><strong class="note">Note</strong>: 
     <span class="simpara">
      Il est possible d&#039;utiliser <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>
      depuis l&#039;intérieur d&#039;une fonction fléchée.
     </span>
    </p></blockquote>
   </div>
  </div><?php manual_footer($setup); ?>