<?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.user-defined.php',
    1 => 'Funzioni definite dall\'utente',
    2 => 'Funzioni definite dall\'utente',
  ),
  'up' => 
  array (
    0 => 'language.functions.php',
    1 => 'Funzioni',
  ),
  'prev' => 
  array (
    0 => 'language.functions.php',
    1 => 'Funzioni',
  ),
  'next' => 
  array (
    0 => 'functions.arguments.php',
    1 => 'Argomenti delle funzioni',
  ),
  '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.user-defined" class="sect1">
   <h2 class="title">Funzioni definite dall&#039;utente</h2>
 
   <p class="para">
    Una funzione può essere definita usando la seguente sintassi:
   </p>
   <p class="para">
    <div class="example" id="example-1">
     <p><strong>Example #1 Pseudo codice per dimostrare l&#039;uso delle 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">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$arg_1</span><span style="color: #007700">, </span><span style="color: #0000BB">$arg_2</span><span style="color: #007700">, </span><span style="color: #FF8000">/* ..., */ </span><span style="color: #0000BB">$arg_n</span><span style="color: #007700">)<br />{<br />    echo </span><span style="color: #DD0000">"Funzione di esempio.\n"</span><span style="color: #007700">;<br />    return </span><span style="color: #0000BB">$retval</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   
   <p class="simpara">
    All&#039;interno di una funzione può apparire qualunque codice PHP valido, persino altre
    funzioni e definizioni di
    <a href="language.oop5.basic.php#language.oop5.basic.class" class="link">classe</a>.
   </p>
   <p class="para">
    I nomi di funzione seguono le stesse regole delle altre etichette PHP. Un
    nome di funzione valido comincia con una lettera o un underscore, seguito
    da un qualsiasi numero di lettere, numeri o underscore. Come espressione
    regolare, questo viene rappresentato così:
    <code class="code">^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$</code>.
   </p>
   <div class="tip"><strong class="tip">Suggerimento</strong><p class="simpara">Si può anche consultare
<a href="userlandnaming.php" class="xref">Guida Denominazione Spazio Utente</a>.</p></div>
   <p class="simpara">
    Le funzioni devono essere definite prima di essere referenziate
    <em>tranne</em> quando una funzione è definita condizionalmente come
    illustrato nei due esempi seguenti.
   </p>
   <p class="para">
    Quando una funzione è definita in modo condizionale, come illustrato
    nei seguenti esempi, occorre che ne venga processata <em>prima</em> la definizione
    poi venga chiamata la funzione stessa.
   </p>
   <p class="para">
    <div class="example" id="example-2">
     <p><strong>Example #2 Funzioni condizionali</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$makefoo </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Qui non possiamo chiamare foo()<br />   poiché non esiste ancora,<br />   ma possiamo chiamare bar() */<br /><br /></span><span style="color: #0000BB">bar</span><span style="color: #007700">();<br /><br />if (</span><span style="color: #0000BB">$makefoo</span><span style="color: #007700">) {<br />  function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />  {<br />    echo </span><span style="color: #DD0000">"Io non esisto sino a quando il programma non mi raggiunge.\n"</span><span style="color: #007700">;<br />  }<br />}<br /><br /></span><span style="color: #FF8000">/* Ora possiamo chiamare foo()<br />   poiché $makefoo vale true */<br /><br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">$makefoo</span><span style="color: #007700">) </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /><br />function </span><span style="color: #0000BB">bar</span><span style="color: #007700">()<br />{<br />  echo </span><span style="color: #DD0000">"Io esco immediatamente dopo l'avvio del programma.\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    <div class="example" id="example-3">
     <p><strong>Example #3 Funzioni dentro 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">foo</span><span style="color: #007700">() <br />{<br />  function </span><span style="color: #0000BB">bar</span><span style="color: #007700">() <br />  {<br />    echo </span><span style="color: #DD0000">"Io non esiste fino a quando non si esegue foo().\n"</span><span style="color: #007700">;<br />  }<br />}<br /><br /></span><span style="color: #FF8000">/* Non possiamo chiamare bar()<br />   poiché non esiste ancora. */<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">/* Ora si può eseguire bar(),<br />   l'elaborazione di foo()<br />   l'ha resa accessibile. */<br /><br /></span><span style="color: #0000BB">bar</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    Tutte le funzioni e le classi, in PHP, hanno visibilità globale - possono
    essere chiamate dall&#039;esterno di una funzione anche se sono definite all&#039;interno di questa e vice-versa.
   </p>
   <p class="simpara">
    PHP non supporta l&#039;overloading di funzioni, non è possibile
    indefinire o ridefinire funzioni precedentemente dichiarate.
   </p>
   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     I nomi delle funzioni non distinguono tra maiuscolo e minuscolo per i caratteri ASCII da <code class="literal">A</code> a <code class="literal">Z</code>, ma, solitamente, è
     buona norma richiamare le funzioni nel modo con cui sono state definite.
    </span>
   </p></blockquote>   
   <p class="simpara">
    Sia <a href="functions.arguments.php#functions.variable-arg-list" class="link">un numero variabile di
    argomenti</a> che <a href="functions.arguments.php#functions.arguments.default" class="link">gli argomenti
    di default</a> sono ammessi nelle funzioni. Vedere anche i riferimenti
    alle 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> per maggiori informazioni.
   </p>
   
   <p class="para">
    In PHP è possibile utilizzare le chiamate a funzioni ricorsive.
    <div class="example" id="example-4">
     <p><strong>Example #4 Funzioni ricorsive</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">recursion</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">)<br />{<br />    if (</span><span style="color: #0000BB">$a </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">20</span><span style="color: #007700">) {<br />        echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$a</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">recursion</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />    }<br />}<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">
     Funzioni/metodi ricorsivi con oltre 100-200 livelli di ricorsione possono
     riempire lo stack e causare la terminazione dello script corrente. In particolare,
     la ricorsione infinita è considerata un errore di programmazione.
    </span>
   </p></blockquote>
   </p>

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