<?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 => 'it',
  ),
  'this' => 
  array (
    0 => 'language.operators.functional.php',
    1 => 'Funzionali',
    2 => 'Operatori Funzionali',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Operatori',
  ),
  'prev' => 
  array (
    0 => 'language.operators.type.php',
    1 => 'Operatori di tipi',
  ),
  'next' => 
  array (
    0 => 'language.control-structures.php',
    1 => 'Strutture di controllo',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    '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">Operatori Funzionali</h2>
 
 <p class="para">
  PHP 8.5, e versioni successive, supportano un operatore che lavora direttamente sui callable. L&#039;operatore
  <code class="literal">|&gt;</code>, o “pipe”, accetta un callable con singolo parametro a destra e gli passa
  il valore che si trova a sinistra, valutando infine il risultato del callable.  Il callable
  a destra può essere un qualsiasi callable PHP valido: una <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span>,
  un <a href="functions.first_class_callable_syntax.php" class="link">first-class callable</a>,
  un oggetto che implementa <a href="language.oop5.magic.php#object.invoke" class="link">__invoke()</a>, ecc.
 </p>
 <p class="para">
  Questo significa che le seguenti righe sono equivalenti.
  <div class="example" id="example-1">
   <p><strong>Example #1 Uso di <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>Il precedente esempio visualizzerà:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
11
11
</pre></div>
   </div>
  </div>
 </p>
 <p class="para">
  Per una singola chiamata questo non è particolarmente utile. Diventa utile quando più chiamate sono concatenate insieme.
  Ciò significa che i seguenti frammenti di codice sono equivalenti dal punto di vista logico:
  <div class="example" id="example-2">
   <p><strong>Example #2 Concatenare chiamate |&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>Il precedente esempio visualizzerà:</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 parte sinistra del pipe può essere qualsiasi valore o espressione.  La parte destra
  può essere qualsiasi callable PHP valido che accetti un singolo parametro, o qualsiasi espressione
  che valuti a un callable di questo tipo.  Le funzioni con più di un parametro richiesto
  non sono consentite e falliranno come se la funzione fosse chiamata normalmente
  con argomenti insufficienti.  Le funzioni che accettano una variabile per riferimento non sono consentite.
  Se la parte destra non valuta in un callable valido, genererà un Error.
 </p>
 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <p class="para">
   È importante notare che, per evitare ambiguità sintattiche, le <a href="functions.arrow.php" class="link">arrow function</a>
   DEVONO essere racchiuse tra parentesi quando vengono usate con un operatore pipe, come negli esempi precedenti.
   In caso contrario, si verificherà un errore fatale.
  </p>
 </p></blockquote>

 <div class="sect2">
  <h3 class="title">Vedere anche:</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); ?>