<?php
// label in function Salt syntax
// is not type juste for best read
$rt = myfunction(
bar_bar: 10,
foo_foo: 5
);
var_dump($rt);
function myfunction($bar_bar, $foo_foo): int
{
return $bar_bar + $foo_foo;
}
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]*$
.
Si può anche consultare Guida Denominazione Spazio Utente.
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
aZ
, 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.
<?php
// label in function Salt syntax
// is not type juste for best read
$rt = myfunction(
bar_bar: 10,
foo_foo: 5
);
var_dump($rt);
function myfunction($bar_bar, $foo_foo): int
{
return $bar_bar + $foo_foo;
}
<?php
//variable-length argument list with variable number arguments & default arguments.
function myName1($b,...$a){
print_r($a);//Array ( [0] => Bar [1] => Baz )
echo "<br>";
echo $b;//Foo
}
$x = "Foo";
$y = "Bar";
$z = "Baz";
myName1($x,$y,$z);
echo "<br>";
function myName2($b="John",...$a){
print_r($a);//Array ( [0] => Bar [1] => Baz )
echo "<br>";
echo $b;//Foo
}
$x = "Foo";
$y = "Bar";
$z = "Baz";
myName2($x,$y,$z);
echo "<br>";
?>