<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.references.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'it',
  ),
  'this' => 
  array (
    0 => 'language.references.pass.php',
    1 => 'Passaggio per riferimento',
    2 => 'Passaggio per riferimento',
  ),
  'up' => 
  array (
    0 => 'language.references.php',
    1 => 'Spiegazioni sui riferimenti',
  ),
  'prev' => 
  array (
    0 => 'language.references.arent.php',
    1 => 'Cosa i riferimenti non sono',
  ),
  'next' => 
  array (
    0 => 'language.references.return.php',
    1 => 'Restituzione per riferimento',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    'path' => 'language/references.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.references.pass" class="sect1">
   <h2 class="title">Passaggio per riferimento</h2>
   <p class="para">
   Si può passare una variabile ad una funzione per riferimento, modificandone gli argomenti.
   La sintassi è la seguente:
    <div class="informalexample">
     <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">(&amp;</span><span style="color: #0000BB">$var</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">$var</span><span style="color: #007700">++;<br />}<br /><br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">=</span><span style="color: #0000BB">5</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// $a adesso è 6<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <span class="simpara">
      Il simbolo del riferimento non si scrive nella chiamata della funzione, ma solo
      nella sua definizione. La definizione della funzione basta da sola
      per passare correttamente un argomento per riferimento. Dal PHP 5.3.0,
      si avrà un warning indicante che &quot;call-time pass-by-reference&quot; (il passaggio per riferimento al momento della chiamata) è
      deprecato quando si usa &amp; <code class="literal">foo(&amp;$a);</code>. 
      Da PHP 5.4.0, il passaggio per riferimento al momento della chiamata è stato rimosso, quindi
      usarlo provoca un errore fatale.
     </span>
    </p></blockquote>
  </p>
  <p class="para">
  Le seguenti cose possono essere passate per riferimento:
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      Variabili, es. <code class="literal">foo($a)</code>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Operatore New, es. <code class="literal">foo(new foobar())</code>
     </span>
    </li>
    <li class="listitem">
     <p class="para">
      Riferimento restituito da una funzione, es.
    <div class="informalexample">
     <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">(&amp;</span><span style="color: #0000BB">$var</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">$var</span><span style="color: #007700">++;<br />}<br />function &amp;</span><span style="color: #0000BB">bar</span><span style="color: #007700">()<br />{<br />    </span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">;<br />    return </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">bar</span><span style="color: #007700">());<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    Vedere anche le spiegazioni sulla <a href="language.references.return.php" class="link">restituzione per riferimento</a>. 
     </p>
    </li>
  </ul>
  </p>
  <p class="para">
  Nessun&#039;altra espressione dovrebbe essere passata per riferimento, poiché
  il risultato sarebbe indefinito. Per esempio, i seguenti esempi di passaggio
  per riferimento non sono validi:
    <div class="informalexample">
     <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">(&amp;</span><span style="color: #0000BB">$var</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">$var</span><span style="color: #007700">++;<br />}<br />function </span><span style="color: #0000BB">bar</span><span style="color: #007700">() </span><span style="color: #FF8000">// Notare l'assenza di &amp;<br /></span><span style="color: #007700">{<br />    </span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">;<br />    return </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">bar</span><span style="color: #007700">()); </span><span style="color: #FF8000">// Produce un errore fatale da PHP 5.0.5<br /><br /></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">5</span><span style="color: #007700">); </span><span style="color: #FF8000">// Expressione: non una variabile<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">); </span><span style="color: #FF8000">// Genera un errore fatale<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    Questi requisiti sono validi per PHP 4.0.4 e seguenti.
   </p>
  </div><?php manual_footer($setup); ?>