echo stampa testo. Scrivi echo "Hello"; per stampare una stringa, echo "Hello, $name"; per includere una variabile, e echo $a, $b; per stampare più valori di fila. Ciò che echo stampa diventa la pagina mostrata dal browser, oppure il testo che vedi in un terminale.
La prima riga usa l'interpolazione (la variabile sta dentro le virgolette doppie), la seconda unisce le stringhe con l'operatore ., e la terza passa tre valori separati da virgole. Tutte e tre stampano lo stesso tipo di risultato.
Stampare HTML con echo
In una pagina web, echo di solito stampa HTML. Il browser riceve il testo e visualizza i tag. Premi Run e la scheda Page mostra il risultato visualizzato:
L'ultima riga usa le virgolette singole, così le virgolette doppie di class="note" non vanno escapate. Dentro le virgolette singole le variabili non vengono sostituite, quindi usale per il testo fisso. Se un valore arriva da un visitatore (un form, l'URL), stampalo passando da htmlspecialchars così non può iniettare HTML; vedi la pagina su htmlspecialchars.
Il tag breve di echo <?=
Dentro un file HTML, <?= $value ?> è la forma breve di <?php echo $value; ?>. Mantiene leggibili i template:
Il tag breve di echo è sempre disponibile. L'altro tag breve, <? senza php, dipende da un'impostazione e non andrebbe usato.
Stampare più valori e andare a capo
echo non aggiunge un'interruzione di riga. In un terminale, aggiungi "\n" (tra virgolette doppie) oppure la costante PHP_EOL. In HTML, un a capo nel sorgente non produce nulla di visibile; usa <br> o elementi separati.
Virgole e punti danno lo stesso output. Con le virgole, echo stampa ogni valore a turno; con i punti, PHP prima costruisce una stringa unica e poi la stampa. Gli a capo hanno una pagina tutta loro: a capo in PHP.
echo vs print
print è il fratello più vecchio. Stampa un valore e restituisce sempre 1, il che gli permette di comparire dentro un'espressione. echo accetta un numero qualsiasi di valori e non restituisce nulla.
echo | print | |
|---|---|---|
| Valori | uno o più, separati da virgole | esattamente uno |
| Restituisce | nulla (è un'istruzione) | 1 |
| Uso in un'espressione | no | sì, $ok = print "x"; |
| Uso tipico | quasi tutto | raramente |
printf è ancora diverso: formatta i valori con dei segnaposto, come printf("%05.2f", 3.14159), ed è trattato nella pagina su sprintf.
Stampare un array o un oggetto
echo stampa solo stringhe e valori che si convertono in stringa (numeri, booleani, null). Un array non si converte. Il tuo PHP stampa un warning e la parola Array:
PHP Warning: Array to string conversion in /home/index.php on line 3
Array
Per mostrarne il contenuto, scegli la funzione adatta:
Un oggetto è più severo: a meno che la sua classe non definisca __toString(), echo $object; ferma lo script con Error: Object of class User could not be converted to string. Anche i booleani sono una sorpresa frequente: echo true; stampa 1 e echo false; non stampa proprio nulla. Usa var_dump($value) quando ti serve vedere il tipo e il valore esatti.
Errore comune: echo con parentesi e virgole
Siccome echo sembra una funzione, si finisce per scrivere echo("a", "b");. È un errore di sintassi, perché le parentesi racchiudono una sola espressione:
PHP Parse error: syntax error, unexpected token "," in /home/index.php on line 2
Togli le parentesi (echo "a", "b";) oppure unisci i valori (echo("a" . "b");). Lo stesso vale per print, che non accetta mai un secondo valore, con o senza parentesi.
Domande frequenti
Qual è la differenza tra echo e print in PHP?
Entrambi stampano stringhe. echo accetta più valori separati da virgole (echo $a, $b;) e non restituisce nulla; print prende esattamente un valore e restituisce 1, quindi si può usare dentro un'espressione. In pratica si usa echo quasi ovunque.
Servono le parentesi con echo?
No. echo è un costrutto del linguaggio, non una funzione, quindi echo "Hi"; è la forma normale. echo("Hi"); funziona perché le parentesi raggruppano solo un'espressione, ma echo("a", "b"); è un errore di sintassi.
Perché echo false non stampa nulla?
echo converte il valore in stringa, e false diventa la stringa vuota "" mentre true diventa "1". Per vedere il booleano in sé, usa var_dump($x); (stampa bool(false)) oppure echo var_export($x, true); (stampa false).
Cosa significa <?= in PHP?
<?= $value ?> è il tag breve di echo, identico a <?php echo $value; ?>. È sempre attivo da PHP 5.4 ed è il modo abituale per stampare valori dentro i template HTML.