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]*$.

Suggerimento

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 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.

add a note add a note

User Contributed Notes 2 notes

up
-25
synnus at gmail dot com
3 years ago
<?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;
}
up
-32
anisgazig at gmail dot com
3 years ago
<?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>";

?>
To Top