Lezioni di PHP - Lezione 7 - Funzioni PHP e programmazione funzionale
Penso che ormai siamo arrivati al momento in cui… è ora di iniziare davvero a programmare. Dopo questa lezione potrai dire con sicurezza che hai programmato in PHP. Spesso capita di dover scrivere del codice che si ripete in più pagine o file .php diversi. Per evitare di duplicare il codice, in PHP esistono le funzioni.
Una funzione è una parte indipendente di codice che esegue un calcolo o un’operazione specifica. Alcuni esempi li abbiamo già incontrati nelle lezioni precedenti:
time()
– restituisce il numero di secondi trascorsi dall’inizio dell’epoca Unix.print()
,echo()
– funzioni che servono per stampare codice HTML.floor()
– restituisce la parte intera di un numero decimale.
Avrai notato che le funzioni si indicano con le parentesi tonde ()
. La forma generale è quindi: nome_funzione()
.
Le regole per dare un nome a una funzione sono le stesse di quelle per le variabili, con l’unica differenza che per le funzioni non si usa il simbolo $
.
Struttura di una funzione
<?php function plus_one($x){ // definizione della funzione $x = $x + 1; // corpo della funzione return $x; // valore restituito } $y = 1; $y = plus_one($y); // chiamata della funzione print $y; ?>
Come suggerisce il nome, questa funzione aggiunge 1 al valore della variabile. Vediamo in dettaglio di cosa si compone una funzione.
Nome della funzione
- Il nome della funzione deve iniziare con una lettera o con un trattino basso (
_
). - Può contenere solo lettere, numeri e trattini bassi (
A-Z
,a-z
,0-9
,_
). - Non può contenere spazi. Se il nome è composto da più parole, si usa un trattino basso (
my_function()
) oppure la notazione camelCase (myFunction()
).
Per definire una nuova funzione si utilizza la parola chiave function.
Corpo della funzione
Il corpo è il codice che la funzione esegue. Nel nostro esempio:
function plus_one($x){ $x = $x + 1; return $x; }
Il corpo della funzione è racchiuso tra parentesi graffe {}
.
Valore restituito
Il valore indicato dopo la parola chiave return è ciò che la funzione restituisce come risultato. Nel nostro caso è la variabile $x
.
Parametri della funzione
I parametri sono le variabili o i valori passati tra parentesi dopo il nome della funzione. Nel nostro esempio abbiamo un solo parametro $x
, ma se ne possono passare più di uno, separandoli con una virgola:
<?php function myFunction($x1, $x2, $x3){ } $y = myFunction($z, 34, 'Ciao, Mondo!'); ?>
I nomi indicati nella definizione servono solo come segnaposto per indicare il numero e la posizione dei parametri. Se il numero di parametri passati non corrisponde, PHP genererà un errore:
<?php function myFunction($x1, $x2, $x3){ } $y = myFunction(34, 'Ciao, Mondo!'); // chiamata errata: mancano parametri! ?>
Esempio pratico
Creiamo una funzione matematica per calcolare y = -2x + 4
e calcoliamo i valori per diversi x
:
<?php function myFunction($x){ $y = -2 * $x + 4; return $y; } $z1 = myFunction(1); $z2 = myFunction(2); $z3 = myFunction(3); print $z1 . '<br />' . $z2 . '<br />' . $z3; ?>
Il risultato sarà: -2, 0, 2. Ora dovresti avere chiaro come funzionano le funzioni in PHP.
Programmazione funzionale
Il nome stesso lo suggerisce: nella programmazione funzionale tutto ruota attorno alle funzioni. In un progetto PHP potresti avere decine di funzioni in un solo file, o anche centinaia in un’intera applicazione. Come gestirle? Semplice: organizziamole per gruppo funzionale in file separati.
Esempio
<?php function incr($x){ $x++; return $x; } function decr($y){ $y--; return $y; } $z = 0; $z = incr($z); $z = incr($z); $z = incr($z); $z = incr($z); $z = decr($z); print $z; ?>
In questo esempio abbiamo aumentato il valore quattro volte e poi diminuito una volta. Il risultato sarà 3.
Ora spostiamo le funzioni alla fine del file:
<?php $z = 0; $z = incr($z); $z = incr($z); $z = incr($z); $z = incr($z); $z = decr($z); print $z; function incr($x){ $x++; return $x; } function decr($y){ $y--; return $y; } ?>
Il risultato rimarrà invariato, perché PHP riconosce le funzioni ovunque siano definite all’interno del file.
Organizzare il codice
Quando il numero di funzioni cresce (50, 100 o 1000), conviene dividerle in file separati in base alla loro logica. Ad esempio:
decr.php:
<?php function decr($y){ $y--; return $y; } ?>
incr.php:
<?php function incr($x){ $x++; return $x; } ?>
Elimina la definizione delle funzioni dal file principale index.php
, perché ridefinire una funzione già esistente genera errore.
Allo stesso modo, chiamare una funzione non definita genera un errore.
Inclusione dei file
Ora includiamo i file contenenti le funzioni nel nostro index.php
:
<?php include 'incr.php'; include 'decr.php'; $z = 0; $z = incr($z); $z = incr($z); $z = incr($z); $z = incr($z); $z = decr($z); print $z; ?>
Ora possiamo usare le funzioni di incr.php
e decr.php
senza appesantire il file principale.
Il risultato rimane lo stesso: 3.
Questa è solo un’introduzione alla programmazione funzionale in PHP — nelle prossime lezioni vedremo le sue potenzialità in modo più approfondito.