Introduzione
Quando si parla di variabili in PHP, spesso ci si concentra solo sul loro contenuto: stringhe, numeri, array, oggetti. Ma nella pratica professionale c’è un aspetto altrettanto importante: dove una variabile è visibile e quanto vive nel codice. Questo tema è strettamente collegato ai tipi di dato, perché il comportamento di una variabile dipende non solo dal valore che contiene, ma anche dal contesto in cui viene usata.
In questo tutorial vedremo un sotto-argomento molto utile e concreto: scope delle variabili e durata della loro visibilità in PHP. È un tema fondamentale per evitare bug, scrivere funzioni pulite e organizzare meglio il codice. Capire lo scope aiuta a prevenire errori comuni come variabili non definite, conflitti di nome e dipendenze nascoste tra funzioni.
Vedremo un esempio pratico con funzioni, variabili locali, parametri, valori di ritorno e una piccola nota sulle variabili globali, per capire perché spesso conviene evitarle.
Codice completo
<?php
declare(strict_types=1);
// Variabile globale: esiste nello scope globale dello script
$siteName = "Tech Blog";
function formatTitle(string $title): string
{
// Questa è una variabile locale: esiste solo dentro la funzione
$prefix = "Articolo";
return $prefix . ": " . $title;
}
function createArticleSummary(string $title, int $views): string
{
// Parametri della funzione: sono variabili locali ricevute dall´esterno
$summary = formatTitle($title);
if ($views >= 1000) {
$summary .= " - contenuto molto letto";
} else {
$summary .= " - contenuto in crescita";
}
return $summary . " (" . $views . " visualizzazioni)";
}
function showSiteHeader(): void
{
// Per usare una variabile globale dentro una funzione, bisogna dichiararla con global
global $siteName;
echo "<h1>" . $siteName . "</h1>";
}
// Dati di esempio
$title = "Variabili e scope in PHP";
$views = 1450;
// Uso delle funzioni
showSiteHeader();
echo "<p>" . createArticleSummary($title, $views) . "</p>";
// Esempio di variabile locale fuori dalla funzione: non è disponibile qui
// echo $prefix; // Errore: variabile non definita
// Esempio di variabile globale usata correttamente
echo "<p>Nome sito: " . $siteName . "</p>";
// Esempio di variabile definita in un blocco if
if ($views > 1000) {
$badge = "Popolare";
}
echo "<p>Badge: " . $badge . "</p>";
?> Spiegazione
Il codice mostra diversi tipi di variabili e, soprattutto, diversi scope.
1. Variabili globali
La variabile $siteName è definita fuori da ogni funzione. In PHP, questo significa che appartiene allo scope globale dello script. Può essere letta direttamente nel file principale, ma non è accessibile automaticamente dentro una funzione.
Per usarla in una funzione, nel codice abbiamo scritto:
global $siteName; Questa istruzione “porta dentro” la variabile globale. Funziona, ma va usata con cautela perché rende il codice meno prevedibile.
2. Variabili locali
Dentro formatTitle() abbiamo definito $prefix. Questa è una variabile locale: nasce quando la funzione viene eseguita e viene distrutta alla fine della funzione.
Questo significa che fuori dalla funzione non esiste più. Se provi a leggere $prefix nel codice principale, PHP genererà un errore o un warning di variabile non definita.
3. Parametri di funzione
I parametri $title e $views sono variabili locali speciali. Ricevono dati dall’esterno e permettono di rendere la funzione riutilizzabile. Questo è uno dei modi migliori per lavorare con le variabili in PHP: invece di dipendere da variabili globali, una funzione riceve ciò che le serve in ingresso.
Inoltre, grazie a declare(strict_types=1); e ai type hint string e int, PHP controlla meglio i tipi di dato. Questo riduce gli errori e rende il comportamento più chiaro.
4. Valore di ritorno
Le funzioni formatTitle() e createArticleSummary() restituiscono stringhe. Il valore di ritorno è un modo pulito di far uscire un dato dalla funzione senza usare variabili esterne.
È una best practice importante: preferisci il return ai side effect quando possibile. Così il codice è più facile da testare e da mantenere.
5. Variabili definite nei blocchi condizionali
Nel blocco if abbiamo definito $badge. In PHP, una variabile creata dentro un blocco condizionale resta disponibile nello scope della funzione o del file in cui è stata definita, ma solo se quel ramo viene eseguito.
Questo è un punto delicato: se la condizione non fosse vera, $badge non esisterebbe, e il successivo echo genererebbe un problema. Per questo conviene inizializzare sempre le variabili prima di usarle.
Best practice
- Evita le variabili globali quando puoi. Rendono il codice più difficile da capire e testare.
- Passa i dati come parametri alle funzioni invece di leggere variabili esterne.
- Restituisci valori con return invece di modificare variabili fuori dalla funzione.
- Inizializza sempre le variabili prima di usarle, soprattutto se dipendono da condizioni.
- Usa type hint e strict types per controllare meglio i tipi di dato.
- Dai nomi chiari alle variabili: un buon nome riduce gli errori di scope e migliora la leggibilità.
- Limita la durata delle variabili: più una variabile vive a lungo, più aumenta il rischio di effetti collaterali.
Una buona regola pratica è questa: se una variabile serve solo in una funzione, lasciala locale. Se un dato deve uscire dalla funzione, restituiscilo. Se un valore è condiviso tra molte parti del programma, valuta una struttura più chiara, come un oggetto o una configurazione centralizzata, invece di affidarti a globali sparse.
Riepilogo
In PHP, le variabili non sono importanti solo per il valore che contengono, ma anche per scope e durata. In questo tutorial abbiamo visto che:
- le variabili globali vivono nello scope del file ma non sono automaticamente disponibili nelle funzioni;
- le variabili locali esistono solo all’interno della funzione o del blocco in cui vengono usate;
- i parametri di funzione sono variabili locali in ingresso;
- il valore di ritorno è spesso il modo più pulito per far uscire un dato da una funzione;
- le variabili create in blocchi condizionali vanno gestite con attenzione per evitare riferimenti a variabili non inizializzate.
Capire questi concetti ti aiuta a scrivere codice più sicuro, leggibile e facile da mantenere. È uno di quei temi che sembra semplice all’inizio, ma che fa davvero la differenza quando un progetto cresce.
Approfondisci con risorse ufficiali
- PHP Manual - Variables: documentazione ufficiale sulle variabili in PHP.
- PHP Manual - Variable scope: guida ufficiale allo scope delle variabili.
- PHP Manual - Functions: per capire bene parametri, return e visibilità.
- PHP Manual - Type declarations: per approfondire i tipi nei parametri e nei valori di ritorno.
Se vuoi, nel prossimo passo posso scrivere anche un tutorial dedicato a variabili superglobali e sicurezza, oppure a tipizzazione rigorosa con strict_types in PHP.
