Lezione 11: Creare una funzione in PHP - Guida Completa per Principianti

Scopri come creare e utilizzare le funzioni in PHP per scrivere codice pulito, riutilizzabile e modulare. Una guida passo-passo per principianti.

Introduzione alle Funzioni in PHP

Benvenuti alla Lezione 11 del nostro corso "Impara PHP in 50 lezioni". In tutte le lezioni precedenti, abbiamo scritto codice che viene eseguito sequenzialmente: il server legge il file dall'alto verso il basso ed esegue ogni istruzione una volta sola. Tuttavia, man mano che i vostri progetti cresceranno, noterete che spesso dovrete ripetere le stesse operazioni in diverse parti del sito.

Immaginate di dover calcolare l'IVA di un prodotto in dieci pagine diverse del vostro e-commerce. Scrivere la formula matematica ogni volta non è solo faticoso, ma è anche rischioso: se l'aliquota IVA cambia, dovreste modificare manualmente ogni singola riga di codice in tutto il sito. È qui che entrano in gioco le funzioni.

Una funzione è, in termini semplici, un blocco di codice che può essere chiamato e riutilizzato più volte. Invece di scrivere la logica di un'operazione ripetutivamente, la "impacchettiamo" all'interno di una funzione e le diamo un nome. Ogni volta che avremo bisogno di quell'operazione, basterà "chiamare" la funzione per nome.

Anatomia di una Funzione: Come dichiararla

Per creare una funzione in PHP, utilizziamo la parola chiave function. La struttura di base è composta da un nome, una coppia di parentesi tonde e un corpo racchiuso tra parentesi graffe.

La sintassi di base

Ecco l'esempio più semplice possibile: una funzione che stampa un messaggio di benvenuto.

<?php
// Dichiarazione della funzione
function salutaUtente() {
    echo "Ciao! Benvenuto nel nostro sito web!\
";
}

// Chiamata della funzione
salutaUtente();
salutaUtente();
?>

Spiegazione del codice:

  1. function salutaUtente(): Qui stiamo definendo la funzione. Il nome scelto è salutaUtente. È importante scegliere nomi descrittivi che spieghino cosa fa la funzione.
  2. { ... }: Tutto ciò che si trova tra le parentesi graffe è il "corpo" della funzione. Questo codice non verrà eseguito finché la funzione non viene esplicitamente chiamata.
  3. salutaUtente();: Questa è la chiamata della funzione. Quando PHP incontra questa riga, "salta" all'interno della definizione della funzione, esegue il codice e poi torna al punto in cui era rimasto.

In questo esempio, chiamando la funzione due volte, il messaggio verrà stampato due volte, ma abbiamo dovuto scrivere il testo del messaggio una sola volta.

Lavorare con i Parametri: Rendere le funzioni dinamiche

Una funzione che stampa sempre lo stesso messaggio è utile, ma limitata. La vera potenza delle funzioni emerge quando possiamo passare loro dei dati. Questi dati sono chiamati parametri (o argomenti).

I parametri agiscono come variabili locali che esistono solo all'interno della funzione. Permettono alla funzione di comportarsi in modo diverso a seconda dei valori che riceve.

Esempio con parametri

Vediamo come modificare la nostra funzione di saluto per renderla personalizzata:

<?php
function salutaPersonalizzato($nome, $titolo) {
    echo "Buongiorno " . $titolo . " " . $nome . "! Benvenuto a bordo.\
";
}

// Chiamiamo la funzione con argomenti diversi
salutaPersonalizzato("Mario", "Sig.");
salutaPersonalizzato("Luigi", "Dott.");
salutaPersonalizzato("Anna", "Arch.");
?>

Perché questo approccio è migliore? In questo caso, la funzione salutaPersonalizzato accetta due parametri: $nome e $titolo. Quando chiamiamo la funzione, i valori che inseriamo tra le parentesi (come "Mario" o "Sig.") vengono assegnati a queste variabili interne. Questo rende il codice estremamente flessibile: la logica (come salutare) rimane costante, ma i dati (chi salutare) cambiano.

Restituire Valori con l'istruzione return

Finora abbiamo usato echo all'interno delle funzioni per stampare risultati a video. Tuttavia, in molti casi non vogliamo che la funzione stampi qualcosa, ma che calcoli un valore e ce lo restituisca per poterlo usare in altre parti del programma.

Per fare questo, utilizziamo la parola chiave return. Quando PHP incontra return, la funzione termina immediatamente e "rimanda indietro" il valore specificato al punto in cui è stata chiamata.

Esempio di calcolo con return

Supponiamo di voler creare una funzione che calcoli il prezzo finale di un prodotto aggiungendo l'IVA.

<?php
function calcolaPrezzoIvato($prezzoNetto, $aliquota = 22) {
    $iva = ($prezzoNetto * $aliquota) / 100;
    $totale = $prezzoNetto + $iva;
    
    return $totale;
}

// Utilizzo della funzione
$prodotto1 = calcolaPrezzoIvato(100);
$prodotto2 = calcolaPrezzoIvato(50, 10); // IVA al 10%

echo "Il prezzo del primo prodotto è: " . $prodotto1 . "€\
";
echo "Il prezzo del secondo prodotto è: " . $prodotto2 . "€\
";
?>

Analisi tecnica:

  1. Parametri predefiniti: Notate $aliquota = 22. Questo è un parametro opzionale. Se non passiamo un secondo valore durante la chiamata, PHP userà automaticamente 22. Se invece passiamo un valore (come 10 nel secondo esempio), quello sostituirà il valore di default.
  2. Il Return: La funzione non stampa nulla. Calcola il totale e lo "espelle" tramite return. Questo ci permette di salvare il risultato in una variabile ($prodotto1) o di usarlo in un'operazione matematica successiva.

Esempi Pratici: Casi d'uso reali

Per capire l'importanza delle funzioni, vediamo due scenari comuni nello sviluppo web.

Caso 1: Formattazione delle date

Spesso in un sito web dobbiamo mostrare le date in un formato specifico (es. "Lunedì 25 Maggio 2023"). Invece di scrivere la funzione di formattazione di PHP in ogni pagina, creiamo una funzione helper:

function formattaDataItaliana($data) {
    return date("d/m/Y", strtotime($data));
}

echo formattaDataItaliana("2023-12-31"); // Output: 31/12/2023

Caso 2: Validazione di input

Quando riceviamo dati da un modulo HTML, dobbiamo pulirli per evitare problemi di sicurezza. Una funzione di validazione è essenziale:

function pulisciInput($testo) {
    $testo = trim($testo);
    $testo = stripslashes($testo);
    $testo = htmlspecialchars($testo);
    return $testo;
}

$nomeUtente = pulisciInput($_POST['username']);

Errori Comuni e FAQ

1. L'errore "Undefined variable"

Un errore frequentissimo per i principianti è cercare di usare una variabile definita dentro una funzione fuori da essa.

function test() {
    $messaggio = "Ciao";
}
test();
echo $messaggio; // ERRORE! $messaggio non esiste fuori dalla funzione.

Soluzione: Usa return per far uscire il valore dalla funzione.

2. Confondere la dichiarazione con la chiamata

Ricordate: scrivere function nome() { ... } serve solo a spiegare a PHP cosa fare. Il codice non verrà eseguito finché non scriverete nome();.

3. Nomi di funzioni duplicati

In PHP, non puoi dichiarare due funzioni con lo stesso nome nello stesso spazio di nomi. Se lo fai, riceverai un errore fatale. Scegli nomi univoci e significativi.

Conclusione e Prossimi Passi

Abbiamo visto che le funzioni sono i mattoni fondamentali di ogni applicazione web professionale. Ci permettono di seguire il principio DRY (Don't Repeat Yourself), riducendo drasticamente la quantità di codice da scrivere e manutenere.

In sintesi, abbiamo imparato:

  • Come definire una funzione con function.
  • Come rendere le funzioni dinamiche tramite i parametri.
  • Come restituire valori utilizzando return.
  • L'importanza dei parametri predefiniti per creare flessibilità.

Per approfondire: Nella prossima lezione esploreremo l'ambito delle variabili (Scope), scoprendo la differenza tra variabili locali e globali e come gestire i dati tra diverse parti del programma. Vi consiglio di fare pratica: provate a creare una piccola libreria di funzioni che calcolino l'area di diverse figure geometriche (cerchio, quadrato, triangolo) e testatele con diversi valori di input!