La dichiarazione di funzioni consente al programmatore di estendere il linguaggio aggiungendovi comandi.
Una funzione è un frammento di codice, che esegue un compito, a cui viene assegnato un nome e che può, opzionalmente, accettare parametri e restituire un valore.
La dichiarazione di una funzione avviene tramite la parola chiave function; la sintassi generale è la seguente
function nome-funzione (argomenti)
{
corpo funzione
}
dove nome-funzione è il nome da assegnare alla funzione e con cui essa verrà invocata; argomenti
è un elenco, eventualmente vuoto, di argomenti (o parametri) da fornire alla funzione; corpo funzione è un blocco di istruzioni PHP che implementano la funzione stessa.
esempio:
// dichiaro la funzione
function prodotto($a,$b) {
return ($a*$b)
}
// chiamo la funzione prodotto
$risultato_prodotto = prodotto(4,3) // $risultato_prodotto vale 12
L'informazione può essere passata alle funzioni tramite la lista degli argomenti, che sono liste di variabili e/o costanti delimitati dalla virgola.
PHP supporta il passaggio di argomenti per valore (comportamento di default),il passaggio di valori per riferimento, e i valori di default per gli argomenti. Le liste di argomenti di lunghezza variabile sono supportate solo in PHP 4 e successivi.
Di default, gli argomenti della funzione sono passati per valore (così se cambiate il valore dell'argomento all'interno della funzione , esso non cambierà fuori della funzione). Se volete permettere ad una funzione di modificare i suoi argomenti, dovete passarli per riferimento.
Se volete che una argomento sia passato sempre per riferimento ad una funzione, dovete anteporre un ampersand (&) al nome dell'argomento nella definizione della funzione:
function aggiungi_qualcosa(&$string)
{
$string .= 'e qualche altra cosa.';
}
$str = 'Questa è una stringa, ';
aggiungi_qualcosa($str);
echo $str; // l'output sarà 'Questa è una stringa, e qualche altra cosa.'
Una funzione può definire valori predefiniti in stile C++ per argomenti scalari come segue:
function fare_il_caffe ($tipo = "cappuccino")
{
return "Sto facendo una tazza di $tipo.\n";
}
echo fare_il_caffe (); // restituisce Sto facendo una tazza di cappuccino
echo fare_il_caffe ("espresso") ; // restituisce Sto facendo una tazza di espresso
Il valore predefinito deve essere un'espressione costante, non (per esempio) una variabile o un membro di classe.
Da notare che quando vengono usati argomenti predefiniti, qualunque argomento predefinito dovrebbe essere a destra degli argomenti non-predefiniti; diversamente, le cose non funzioneranno come ci si aspetta.
I valori vengono restituiti usando l'istruzione opzionale return. Può essere restituito qualsiasi tipo, incluse liste ed oggetti. Ciò provoca l'interruzione dell'esecuzione della funzione immediatamente e la restituzione del controllo alla linea da cui è stata chiamata.
function cubo ($num)
{
return $num * $num * $num;
}
echo cubo (4); // L'output è '64'
PHP supporta il concetto di funzioni variabili. Ciò significa che se un nome di variabile ha le parentesi accodate ad esso, PHP cercherà una funzione con lo stesso nome del valore della variabile, e cercherà di eseguirla. Tra le altre cose, ciò puo essere usato per implementare delle callbacks, tabelle di funzioni e così via.
Le funzioni variabili non funzionano con costrutti di linguaggio come echo(), unset(), isset(), empty() e include(). Ad ogni modo, il costrutto print() è un'eccezione e funzionerà. Questa è una delle maggiori differenze tra le funzioni PHP e i costrutti di linguaggio.
Esempio
<?php
function prova_variabile($a="prova variabile")
{
echo $a;
};
function f2 ($a = "sono f2"){
echo $a;
}
$func = 'prova_variabile';
$func();
$func = 'f2';
$func('test');
?>
il risultato di questo script sarà :
prova variabiletest
poiché sarà eseguita prima la funzione prova_variabile senza argomenti ( e quindi sarà valorizzato l'argomento di default), e poi la funzione f2 con argomento 'test' che quindi verrà restituito in output.