Introduzione
Quando un’applicazione PHP genera messaggi, titoli HTML, query o percorsi di file, deve spesso combinare parti fisse e valori variabili. Questa operazione si chiama costruzione dinamica di una stringa e può essere eseguita principalmente tramite concatenazione, interpolazione delle variabili e composizione progressiva.
Scegliere il metodo corretto non è soltanto una questione di stile. Un codice ben organizzato deve essere leggibile, evitare ambiguità e separare i dati dalla loro rappresentazione. Per esempio, una frase breve può essere costruita facilmente con l’interpolazione, mentre un testo prodotto in più passaggi può essere gestito meglio usando un array di frammenti e la funzione implode().
In questo tutorial realizzeremo un piccolo riepilogo di un ordine. Useremo dati variabili, costruiremo righe di testo in modo progressivo e produrremo una stringa finale pronta per essere visualizzata.
Codice completo
<?php
// Dati dell´ordine
$cliente = ´Marta Rossi´;
$numeroOrdine = 1048;
$prodotti = [
[´nome´ => ´Tastiera meccanica´, ´quantita´ => 1, ´prezzo´ => 79.90],
[´nome´ => ´Mouse wireless´, ´quantita´ => 2, ´prezzo´ => 24.50],
];
$totale = 0.0;
// Header costruito tramite interpolazione
$righe = [
"Riepilogo ordine #$numeroOrdine",
"Cliente: $cliente",
"Prodotti:"
];
// Aggiunta progressiva delle righe
foreach ($prodotti as $prodotto) {
$subtotale = $prodotto[´quantita´] * $prodotto[´prezzo´];
$totale += $subtotale;
// Le parentesi graffe rendono chiara l´interpolazione
$righe[] = "- {$prodotto[´nome´]} x{$prodotto[´quantita´]}: "
. number_format($subtotale, 2, ´,´, ´.´) . ´ €´;
}
// Concatenazione dell´ultima informazione
$righe[] = ´Totale: ´ . number_format($totale, 2, ´,´, ´.´) . ´ €´;
// Unione dei frammenti con un ritorno a capo
$messaggio = implode(PHP_EOL, $righe);
echo nl2br(htmlspecialchars($messaggio, ENT_QUOTES, ´UTF-8´)); Spiegazione
Concatenare con l’operatore punto
In PHP l’operatore . unisce due o più stringhe:
<?php
$nome = ´Luca´;
$messaggio = ´Ciao, ´ . $nome . ´!´;
echo $messaggio; Il punto è utile quando una parte del testo viene prodotta da una funzione o da un’espressione. Nell’esempio completo, il subtotale viene prima formattato con number_format() e poi concatenato al resto della riga.
Dal punto di vista della leggibilità, è spesso meglio usare più righe quando l’espressione è lunga:
<?php
$riga = ´Prodotto: ´ . $nomeProdotto
. ´ - Quantità: ´ . $quantita
. ´ - Totale: ´ . $totale; Interpolare le variabili
L’interpolazione permette di inserire direttamente una variabile all’interno di una stringa delimitata da doppi apici:
<?php
$utente = ´Anna´;
$ruolo = ´editor´;
$descrizione = "L´utente $utente ha il ruolo di $ruolo."; Questa tecnica non funziona nello stesso modo con gli apici singoli. La stringa ´Ciao $utente´ contiene infatti i caratteri letterali $utente, non il valore della variabile.
Quando il nome della variabile è vicino ad altri caratteri, è preferibile utilizzare le parentesi graffe:
<?php
$numero = 15;
echo "Il file è report_{$numero}.pdf"; Le graffe indicano con precisione dove termina il nome della variabile. Sono particolarmente utili con proprietà di oggetti, elementi di array o parole immediatamente successive.
Costruire una stringa con un array di frammenti
Nel codice completo non abbiamo aggiunto manualmente ogni riga a una grande variabile. Abbiamo invece inserito i frammenti nell’array $righe e li abbiamo uniti alla fine con implode().
Questo approccio è pratico quando il testo viene generato dentro un ciclo. Evita concatenazioni ripetute e rende semplice aggiungere, eliminare o riordinare le sezioni del messaggio.
<?php
$frammenti = [];
$frammenti[] = ´Prima riga´;
$frammenti[] = ´Seconda riga´;
$frammenti[] = ´Terza riga´;
$testo = implode(PHP_EOL, $frammenti); La costante PHP_EOL rappresenta il separatore di riga appropriato per il sistema operativo. Se il testo deve essere mostrato in HTML, un semplice ritorno a capo non viene normalmente visualizzato come nuova riga. Per questo motivo l’esempio usa nl2br().
Visualizzare dati provenienti dall’utente
Prima di stampare testo generato da utenti o da fonti esterne all’interno di una pagina HTML, è importante usare htmlspecialchars(). La funzione converte caratteri speciali come <, > e le virgolette, riducendo il rischio di inserire HTML o JavaScript indesiderato.
La funzione di escaping dipende dal contesto: il testo HTML richiede una gestione diversa rispetto a un attributo HTML, una query SQL o un’intestazione HTTP. La concatenazione da sola non rende sicuri i dati.
Best practice
- Usa gli apici singoli per stringhe completamente statiche, ad esempio
´Stato completato´. - Usa gli apici doppi quando vuoi interpolare variabili in modo leggibile.
- Preferisci le parentesi graffe in espressioni come
"file_{$id}.txt". - Per testi costruiti in più passaggi, raccogli i frammenti in un array e usa
implode(). - Non confondere la costruzione della stringa con la sua sicurezza: applica l’escaping nel punto in cui il testo viene inserito nel contesto finale.
- Evita di mescolare calcoli complessi direttamente dentro una stringa. Calcola prima il valore e poi costruisci il testo.
- Per importi monetari, non affidarti alla conversione automatica dei numeri in stringhe: formatta esplicitamente il valore.
- Usa nomi descrittivi per gli array di frammenti, come
$righe,$partiMessaggioo$sezioni.
Riepilogo
La concatenazione con il punto è ideale quando devi combinare valori e risultati di funzioni. L’interpolazione rende compatte le frasi semplici, soprattutto quando utilizzi le parentesi graffe per delimitare chiaramente le variabili. Quando una stringa viene prodotta progressivamente, un array di frammenti unito con implode() offre una struttura più ordinata e facile da modificare.
Una buona gestione delle stringhe considera anche il contesto di output: prima di mostrare dati dinamici in HTML, usa htmlspecialchars(). Separare calcoli, costruzione del testo e output sicuro permette di ottenere codice più leggibile, testabile e robusto.
