<?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 => 'it',
  ),
  'this' => 
  array (
    0 => 'functions.arguments.php',
    1 => 'Argomenti delle funzioni',
    2 => 'Argomenti delle funzioni',
  ),
  'up' => 
  array (
    0 => 'language.functions.php',
    1 => 'Funzioni',
  ),
  'prev' => 
  array (
    0 => 'functions.user-defined.php',
    1 => 'Funzioni definite dall\'utente',
  ),
  'next' => 
  array (
    0 => 'functions.returning-values.php',
    1 => 'Valori restituiti',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    '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">Argomenti delle funzioni</h2>
 
   <p class="simpara">
    L&#039;informazione può essere passata alle funzioni tramite la lista degli argomenti,
    che sono liste di espressioni delimitati dalla virgola. Gli argomenti sono
    valutati da sinistra a destra, prima che la funzione venga effettivamente chiamata
    (valutazione <em>eager</em>).
   </p> 

   <p class="para">
    PHP supporta il passaggio di argomenti per valore (comportamento di default), <a href="functions.arguments.php#functions.arguments.by-reference" class="link">il passaggio
    per riferimento</a>, e <a href="functions.arguments.php#functions.arguments.default" class="link">i valori di default
    degli argomenti</a>. Le <a href="functions.arguments.php#functions.variable-arg-list" class="link">liste di argomenti
    di lunghezza varabile</a> e i <a href="functions.arguments.php#functions.named-arguments" class="link">Named Arguments</a>
    sono ugualmente supportati.
   </p>
   <p class="para">
    <div class="example" id="example-1">
     <p><strong>Example #1 Passaggio di array a funzioni</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">prende_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$input</span><span style="color: #007700">)<br />{<br />    echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]</span><span style="color: #DD0000"> + </span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]</span><span style="color: #DD0000"> = "</span><span style="color: #007700">, </span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]+</span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    A partire da PHP 8.0.0, l&#039;elenco degli argomenti della funzione può includere una virgola finale, che
    verrà ignorata.  Ciò è particolarmente utile nei casi in cui l&#039;elenco di argomenti è
    lungo o contiene nomi di variabili lunghi, rendendo conveniente elencare gli argomenti verticalmente.
   </p>
   <div class="example" id="example-2">
    <p><strong>Example #2 Elenco degli Argomenti della Funzione con Virgola 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">// Questa virgola finale non era consentita prima della 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>
   <p class="para">
    A partire da PHP 8.0.0, dichiarare argomenti obbligatori dopo argomenti opzionali
    è deprecato. Questo può essere generalmente risolto eliminando il valore predefinito.
    Un&#039;eccezione a questa regola sono gli argomenti nella forma
    <code class="code">Type $param = null</code>, dove il default <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> rende il tipo implicitamente
    annullabile. Questo utilizzo rimane consentito, sebbene si consiglia di utilizzare invece
    un tipo nullable esplicito.
   </p>
   <div class="example" id="example-3">
    <p><strong>Example #3 Dichiarazione di argomenti facoltativi dopo argomenti obbligatori</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: #FF8000">// Prima<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">// Dopo<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">// Ancora consentito<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">// Consigliato<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <div class="sect2" id="functions.arguments.by-reference">
    <h3 class="title">Passare argomenti per riferimento</h3>
 
    <p class="simpara">
     Di default, gli argomenti della funzione sono passati per valore (così se
     cambiate il valore dell&#039;argomento all&#039;interno della funzione , esso non
     cambierà fuori della funzione). Se volete permettere ad una
     funzione di modificare i suoi argomenti, dovete passarli per riferimento.
    </p>
    <p class="para">
     Se volete che una argomento sia passato sempre per riferimento ad una funzione,
     dovete anteporre un ampersand (&amp;) al nome dell&#039;argomento nella definizione della funzione:
    </p>
    <p class="para">
     <div class="example" id="example-4">
      <p><strong>Example #4 Passaggio di parametri per riferimento</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">aggiungi_qualcosa</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">'e qualche altra cosa.'</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'Questa è una stringa, '</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">aggiungi_qualcosa</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">// l'output sarà 'Questa è una stringa, e qualche altra cosa.'<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </div>
    </p>
    <p class="para">
     È un errore passare un valore come argomento che dovrebbe essere passato per riferimento.
    </p>
   </div>
   <div class="sect2" id="functions.arguments.default">
    <h3 class="title">Valori predefiniti degli argomenti</h3>
 
    <p class="para">
     Una funzione può definire valori predefiniti in stile C++ per
     argomenti scalari come segue:
    </p>
    <p class="para">
     <div class="example" id="example-5">
      <p><strong>Example #5 Utilizzo dei parametri default in una funzione</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">fare_il_caffe</span><span style="color: #007700">(</span><span style="color: #0000BB">$tipo </span><span style="color: #007700">= </span><span style="color: #DD0000">"cappuccino"</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Sto facendo una tazza di </span><span style="color: #0000BB">$tipo</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br />echo </span><span style="color: #0000BB">fare_il_caffe</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">fare_il_caffe</span><span style="color: #007700">(</span><span style="color: #0000BB">null</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">fare_il_caffe</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>Il precedente esempio visualizzerà:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
Sto facendo una tazza di cappuccino.
Sto facendo una tazza di.
Sto facendo una tazza di espresso.
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     Anche il PHP permette di utilizzare <span class="type"><a href="language.types.array.php" class="type array">array</a></span> ed il tipo speciale <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>
     come valore di default, ad esempio:
    </p>
    <p class="para">
     <div class="example" id="example-6">
      <p><strong>Example #6 Utilizzo di tipi non scalari come valori di default</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">makecoffee</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">"hands" </span><span style="color: #007700">: </span><span style="color: #0000BB">$coffeeMaker</span><span style="color: #007700">;<br />    return </span><span style="color: #DD0000">"Making a cup of "</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">" with </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">makecoffee</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">makecoffee</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">"teapot"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </div>
    
    </p>
    <p class="simpara">
     Il valore predefinito deve essere un&#039;espressione costante, non (per
     esempio) una variabile, un membro di classe o una chiamata ad una funzione.
    </p>
    <p class="para">
     Da notare che quando vengono usati argomenti predefiniti, qualunque argomento predefinito dovrebbe essere
     a destra degli argomenti non-predefiniti; diversamente, le cose
     non funzioneranno come ci si aspetti. Si consideri il seguente frammento di codice:
    </p>
    <p class="para">
     <div class="example" id="example-7">
      <p><strong>Example #7 Utilizzo incorretto degli argomenti di default</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">fare_lo_yogurt</span><span style="color: #007700">(</span><span style="color: #0000BB">$tipo </span><span style="color: #007700">= </span><span style="color: #DD0000">"yogurt"</span><span style="color: #007700">, </span><span style="color: #0000BB">$gusto</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Fare una vaschetta di </span><span style="color: #0000BB">$tipo</span><span style="color: #DD0000"> a </span><span style="color: #0000BB">$gusto</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">fare_lo_yogurt</span><span style="color: #007700">(</span><span style="color: #DD0000">"fragola"</span><span style="color: #007700">);   </span><span style="color: #FF8000">// non funziona come si aspetta<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="cdata"><pre>
Warning: Missing argument 2 in call to fare_lo_yogurt() in 
/usr/local/etc/httpd/htdocs/phptest/functest.html on line 41
Fare una vaschetta di fragola a.
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     Ora, si confronti il codice di sopra con questo:
    </p>
    <p class="para">
     <div class="example" id="example-8">
      <p><strong>Example #8 Utilizzo corretto degli argomenti di default</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">fare_lo_yogurt</span><span style="color: #007700">(</span><span style="color: #0000BB">$gusto</span><span style="color: #007700">, </span><span style="color: #0000BB">$tipo </span><span style="color: #007700">= </span><span style="color: #DD0000">"yogurt"</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #DD0000">"Fare una vaschetta di </span><span style="color: #0000BB">$tipo</span><span style="color: #DD0000"> a </span><span style="color: #0000BB">$gusto</span><span style="color: #DD0000">.\n"</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #0000BB">fare_lo_yogurt</span><span style="color: #007700">(</span><span style="color: #DD0000">"fragola"</span><span style="color: #007700">);   </span><span style="color: #FF8000">// funziona come si aspetta<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="cdata"><pre>
Fare una vaschetta di yogurt a fragola.
</pre></div>
      </div>
     </div>
    </p>
    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <span class="simpara">
      I parametri che sono passati per riferimento possono avere un valore di default.
     </span>
    </p></blockquote>
   </div>

   <div class="sect2" id="functions.variable-arg-list">
    <h3 class="title">Liste di argomenti a lunghezza variabile</h3>

    <p class="simpara">
     PHP ha il supporto per le liste di argomenti a lunghezza variabile nelle
     funzioni definite dall&#039;utente utilizzando il
     token <code class="literal">...</code>.
    </p>
    
    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <span class="simpara">
      È anche possibile ottenere argomenti di lunghezza variabile utilizzando
      le funzioni <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>, e
      <span class="function"><a href="function.func-get-args.php" class="function">func_get_args()</a></span>.
      Questa tecnica è sconsigliata poiché era utilizzata prima dell&#039;introduzione
      del token <code class="literal">...</code>.
     </span>
    </p></blockquote>

    <p class="para">
     Le liste dei parametri possono includere il token
     <code class="literal">...</code> per denotare che la funzione accetta un
     numero variabile di parametri. I parametri saranno passati nella
     variabile data come un array; per esempio:

     <div class="example" id="example-9">
      <p><strong>Example #9 Utilizzo di <code class="literal">...</code> per accedere ai parametri variabili</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>Il precedente esempio visualizzerà:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
10
</pre></div>
      </div>
     </div>
    </p>

    <p class="para">
     Si può anche usare <code class="literal">...</code> quando vengono chiamate funzioni per spacchettare
     un <span class="type"><a href="language.types.array.php" class="type array">array</a></span> o una variabile <span class="classname"><a href="class.traversable.php" class="classname">Traversable</a></span> o
     literal all&#039;interno della lista degli argomenti:

     <div class="example" id="example-10">
      <p><strong>Example #10 Uso di <code class="literal">...</code> per fornire parametri</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>Il precedente esempio visualizzerà:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
3
3
</pre></div>
      </div>
     </div>
    </p>

    <p class="para">
     Si possono specificare parametri con posizione normale prima del
     token <code class="literal">...</code>. In questo caso, solo i parametri seguenti
     che non corrispondono ad un parametro posizionale saranno aggiunti all&#039;array
     generato da <code class="literal">...</code>.
    </p>

    <p class="para">
     È anche possibile aggiungere una
     <a href="language.types.declarations.php" class="link">dichiarazione di tipo</a> prima del
     token <code class="literal">...</code>. Se questa è presente, allora tutti i parametri
     catturati da <code class="literal">...</code> devono corrispondere a quel tipo di parametro.

     <div class="example" id="example-11">
      <p><strong>Example #11 Parametri variabili con tipo dichiarato</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">' days'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Questo fallirà, dato che null non è un oggetto 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>Il precedente esempio visualizzerà:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
3 days
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">
     Infine, si possono anche passare parametri variabili
     <a href="functions.arguments.php#functions.arguments.by-reference" class="link">per riferimento</a>
     anteponendo <code class="literal">...</code> con un ampersand
     (<code class="literal">&amp;</code>).
    </p>

    <div class="sect3" id="functions.variable-arg-list.old">
     <h4 class="title">Versioni precedenti di PHP</h4>

     <p class="para">
      Non è richiesta una sintassi speciale per annotare che una funzione è variadica;
      tuttavia per accedere ai parametri della funzione bisogna usare
      <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>
      e <span class="function"><a href="function.func-get-args.php" class="function">func_get_args()</a></span>.
     </p>

     <p class="para">
      Il primo esempio di sopra sarebbe implementato come segue in vecchie versioni di PHP:

      <div class="example" id="example-12">
       <p><strong>Example #12 Accesso ai parametri variabili in vecchie versioni di PHP</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">() {<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">func_get_args</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>Il precedente esempio visualizzerà:</p></div>
       <div class="example-contents screen">
<div class="cdata"><pre>
10
</pre></div>
       </div>
      </div>
     </p>
    </div>

   </div>

   <div class="sect2" id="functions.named-arguments">
    <h3 class="title">Argomenti Nominali</h3>

    <p class="para">
     PHP 8.0.0 ha introdotto argomenti nominali come estensione dei parametri
     posizionali esistenti. Gli argomenti nominali consentono di passare argomenti ad una
     funzione in base al nome del parametro, piuttosto che alla posizione del parametro.
     Ciò rende il significato dell&#039;argomento auto-documentante, rende gli
     argomenti indipendenti dall&#039;ordine e consente di saltare arbitrariamente i valori predefiniti.
    </p>

    <p class="para">
     Gli argomenti nominali vengono passati anteponendo al valore il nome del parametro
     seguito da due punti. È consentito l&#039;utilizzo di parole chiave riservate come nomi di parametri.
     Il nome del parametro deve essere un identificatore, non è consentito
     specificarlo dinamicamente.
    </p>

    <div class="example" id="example-13">
     <p><strong>Example #13 Sintassi dell&#039;argomento denominato</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 supportato.<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>Example #14 Argomenti posizionali contro argomenti nominali</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">// Utilizzo di argomenti posizionali:<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">// Utilizzo di argomenti nominali:<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;ordine in cui vengono passati gli argomenti nominali non ha importanza.
    </p>

    <div class="example" id="example-15">
     <p><strong>Example #15 Stesso esempio di sopra con un diverso ordine dei parametri</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">
     Gli argomenti nominali possono essere combinati con argomenti posizionali. In questo caso,
     gli argomenti nominali devono venire dopo gli argomenti posizionali.
     È anche possibile specificare solo alcuni degli argomenti opzionali di una
     funzione, indipendentemente dal loro ordine.
    </p>

    <div class="example" id="example-16">
     <p><strong>Example #16 Combinazione di argomenti nominali con argomenti posizionali</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">// Uguale a<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">
     Il passaggio multiplo dello stesso parametro genera un&#039;eccezione Error.
    </p>

    <div class="example" id="example-17">
     <p><strong>Example #17 Eccezione Error durante il passaggio multiplo dello stesso parametro</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 /></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 /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>

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