<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.operators.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'language.operators.functional.php',
    1 => 'Fonctionnels',
    2 => 'Op&eacute;rateurs fonctionnels',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Les op&eacute;rateurs',
  ),
  'prev' => 
  array (
    0 => 'language.operators.type.php',
    1 => 'Type',
  ),
  'next' => 
  array (
    0 => 'language.control-structures.php',
    1 => 'Les structures de contr&ocirc;le',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'language/operators/functional.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.operators.functional" class="sect1">
 <h2 class="title">Opérateurs fonctionnels</h2>
 
 <p class="para">
  PHP 8.5 et versions ultérieures prennent en charge un opérateur qui fonctionne directement
  sur les fonctions callables. L&#039;opérateur <code class="literal">|&gt;</code>, ou « pipe », accepte
  une fonction callable à un seul paramètre à droite et lui transmet la valeur de gauche,
  le résultat étant la valeur renvoyée par la fonction callable. La fonction callable de
  droite peut être n&#039;importe quelle fonction callable PHP valide : une <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span>,
  une <a href="functions.first_class_callable_syntax.php" class="link">fonction callable de première classe
 </a>, un objet qui implémente <a href="language.oop5.magic.php#object.invoke" class="link">__invoke()</a>, etc.
 </p>
 <p class="para">
  Cela signifie que les deux lignes suivantes sont logiquement équivalentes.
  <div class="example" id="example-1">
   <p><strong>Exemple #1 En utilisant <code class="literal">|&gt;</code></strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$result </span><span style="color: #007700">= </span><span style="color: #DD0000">"Hello World" </span><span style="color: #007700">|&gt; </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(...);<br />echo </span><span style="color: #0000BB">$result</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #DD0000">"Hello World"</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$result</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</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="annotation-interactive cdata"><pre>
11
11
</pre></div>
   </div>
  </div>
 </p>
 <p class="para">
  Pour un seul appel, cela n&#039;est pas particulièrement utile. Cela devient utile lorsque plusieurs appels sont enchaînés.
  Autrement dit, les deux fragments de code suivants sont logiquement équivalents :
  <div class="example" id="example-2">
   <p><strong>Exemple #2 Enchaînement d&#039;appels |&gt;</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$result </span><span style="color: #007700">= </span><span style="color: #DD0000">"PHP Rocks"<br />    </span><span style="color: #007700">|&gt; </span><span style="color: #0000BB">htmlentities</span><span style="color: #007700">(...)<br />    |&gt; </span><span style="color: #0000BB">str_split</span><span style="color: #007700">(...)<br />    |&gt; (fn(</span><span style="color: #0000BB">$x</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">array_map</span><span style="color: #007700">(</span><span style="color: #0000BB">strtoupper</span><span style="color: #007700">(...), </span><span style="color: #0000BB">$x</span><span style="color: #007700">))<br />    |&gt; (fn(</span><span style="color: #0000BB">$x</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">array_filter</span><span style="color: #007700">(</span><span style="color: #0000BB">$x</span><span style="color: #007700">, fn(</span><span style="color: #0000BB">$v</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">$v </span><span style="color: #007700">!= </span><span style="color: #DD0000">'O'</span><span style="color: #007700">))<br />;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$temp </span><span style="color: #007700">= </span><span style="color: #DD0000">"PHP Rocks"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$temp </span><span style="color: #007700">= </span><span style="color: #0000BB">htmlentities</span><span style="color: #007700">(</span><span style="color: #0000BB">$temp</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$temp </span><span style="color: #007700">= </span><span style="color: #0000BB">str_split</span><span style="color: #007700">(</span><span style="color: #0000BB">$temp</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$temp </span><span style="color: #007700">= </span><span style="color: #0000BB">array_map</span><span style="color: #007700">(</span><span style="color: #0000BB">strtoupper</span><span style="color: #007700">(...), </span><span style="color: #0000BB">$temp</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$temp </span><span style="color: #007700">= </span><span style="color: #0000BB">array_filter</span><span style="color: #007700">(</span><span style="color: #0000BB">$temp</span><span style="color: #007700">, fn(</span><span style="color: #0000BB">$v</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">$v </span><span style="color: #007700">!= </span><span style="color: #DD0000">'O'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$temp</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</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="annotation-interactive cdata"><pre>
Array
(
    [0] =&gt; P
    [1] =&gt; H
    [2] =&gt; P
    [3] =&gt;
    [4] =&gt; R
    [6] =&gt; C
    [7] =&gt; K
    [8] =&gt; S
)
Array
(
    [0] =&gt; P
    [1] =&gt; H
    [2] =&gt; P
    [3] =&gt;
    [4] =&gt; R
    [6] =&gt; C
    [7] =&gt; K
    [8] =&gt; S
)
</pre></div>
   </div>
  </div>
 </p>
 <p class="para">
  La partie gauche de l&#039;opérateur de pipeline peut être n&#039;importe quelle valeur ou expression. La partie droite
  peut être n&#039;importe quelle callable PHP valide acceptant un seul paramètre, ou toute expression
  qui s&#039;évalue à un tel callable. Les fonctions avec plus d&#039;un paramètre obligatoire
  ne sont pas autorisées et échoueront comme si la fonction était appelée normalement
  avec des arguments insuffisants. Les fonctions qui prennent une variable par référence ne sont pas autorisées.
  Si la partie droite ne s&#039;évalue pas à un callable valide, une Error sera levée.
 </p>
 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <p class="para">
   À noter que, pour éviter toute ambiguïté syntaxique, les <a href="functions.arrow.php" class="link">fonctions fléchées</a>
   DOIVENT être placées entre parenthèses lorsqu&#039;elles sont utilisées avec un opérateur de pipeline, comme dans les exemples ci-dessus.
   Ne pas le faire entraînera une erreur fatale.
  </p>
 </p></blockquote>

 <div class="sect2">
  <h3 class="title">Voir aussi</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="classname"><a href="class.closure.php" class="classname">Closure</a></span></li>
   </ul>
  </p>
 </div>
</div><?php manual_footer($setup); ?>