Funzioni definite dall'utente
Una funzione può essere definita usando la seguente sintassi:
Example #1 Pseudo codice per dimostrare l'uso delle funzioni
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Funzione di esempio.\n";
return $retval;
}
?>
All'interno di una funzione può apparire qualunque codice PHP valido, persino altre
funzioni e definizioni di
classe.
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ì:
^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
.
Le funzioni devono essere definite prima di essere referenziate
tranne quando una funzione è definita condizionalmente come
illustrato nei due esempi seguenti.
Quando una funzione è definita in modo condizionale, come illustrato
nei seguenti esempi, occorre che ne venga processata prima la definizione
poi venga chiamata la funzione stessa.
Example #2 Funzioni condizionali
<?php
$makefoo = true;
/* Qui non possiamo chiamare foo()
poiché non esiste ancora,
ma possiamo chiamare bar() */
bar();
if ($makefoo) {
function foo()
{
echo "Io non esisto sino a quando il programma non mi raggiunge.\n";
}
}
/* Ora possiamo chiamare foo()
poiché $makefoo vale true */
if ($makefoo) foo();
function bar()
{
echo "Io esco immediatamente dopo l'avvio del programma.\n";
}
?>
Example #3 Funzioni dentro a funzioni
<?php
function foo()
{
function bar()
{
echo "Io non esiste fino a quando non si esegue foo().\n";
}
}
/* Non possiamo chiamare bar()
poiché non esiste ancora. */
foo();
/* Ora si può eseguire bar(),
l'elaborazione di foo()
l'ha resa accessibile. */
bar();
?>
Tutte le funzioni e le classi, in PHP, hanno visibilità globale - possono
essere chiamate dall'esterno di una funzione anche se sono definite all'interno di questa e vice-versa.
PHP non supporta l'overloading di funzioni, non è possibile
indefinire o ridefinire funzioni precedentemente dichiarate.
Nota:
I nomi delle funzioni non distinguono tra maiuscolo e minuscolo per i caratteri ASCII da A
a Z
, ma, solitamente, è
buona norma richiamare le funzioni nel modo con cui sono state definite.
Sia un numero variabile di
argomenti che gli argomenti
di default sono ammessi nelle funzioni. Vedere anche i riferimenti
alle funzioni
func_num_args(),
func_get_arg() e
func_get_args() per maggiori informazioni.
In PHP è possibile utilizzare le chiamate a funzioni ricorsive.
Example #4 Funzioni ricorsive
<?php
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>
Nota:
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.