La parola chiave "print" in PHP invia una stringa al browser o ad un altro flusso di output. In questo articolo esploriamo la sintassi e l'utilizzo.
Il costrutto print in PHP
print invia una stringa al flusso di output su cui PHP sta scrivendo — di solito il browser quando si esegue una pagina web, oppure il terminale quando si esegue uno script da riga di comando. Nonostante sembri una funzione, print è un costrutto del linguaggio: è integrato direttamente nel linguaggio, accetta esattamente un argomento e restituisce sempre l'intero 1.
Questo singolo valore di ritorno è ciò che distingue print da echo e lo rende utilizzabile all'interno di espressioni più ampie. Questo capitolo tratta la sintassi, le differenze tra print ed echo, i casi in cui il valore di ritorno è rilevante e i modi più comuni in cui viene utilizzato.
Sintassi
print "Hello, world!";Poiché print è un costrutto e non una funzione, le parentesi sono facoltative. Entrambe le forme sono valide e si comportano in modo identico:
print "Hello, world!"; // without parentheses
print("Hello, world!"); // with parenthesesLe parentesi semplicemente raggruppano l'argomento; non trasformano print in una chiamata di funzione. Accetta comunque un solo argomento — non è possibile passare un elenco separato da virgole come permette echo.
Stampa di variabili ed espressioni
print valuta prima il proprio argomento, quindi è possibile passare una variabile, una stringa concatenata o qualsiasi espressione che si risolva in un valore simile a una stringa. Le variabili all'interno di stringhe con virgolette doppie vengono interpolate automaticamente:
<?php
$name = "John";
// Interpolation inside a double-quoted string
print "Hello, $name!" . PHP_EOL; // Hello, John!
// Concatenation with the . operator
print "Sum: " . (1 + 2) . PHP_EOL; // Sum: 3PHP_EOL è il carattere di nuova riga della piattaforma — utile negli script da riga di comando affinché ogni istruzione venga stampata su una riga separata. (Vedere PHP Operators per l'operatore di concatenazione . e PHP Variables per le regole di interpolazione.)
Utilizzo del valore di ritorno
Ogni chiamata a print restituisce 1. Da sola questa cosa può sembrare inutile, ma permette a print di comparire dove è atteso un valore — ad esempio, all'interno di un'assegnazione o di un'espressione logica:
<?php
// Assigning the result (always 1)
$result = print "Success" . PHP_EOL;
echo $result . PHP_EOL; // 1
// Using print inside a ternary expression
$loggedIn = false;
$loggedIn ? print "Welcome back" : print "Please log in";echo non può essere usato in questo modo: $x = echo "hi"; è un errore di sintassi, perché echo non restituisce nulla. Se si ha bisogno di un output come parte di un'espressione, è necessario usare print.
print vs echo
I due costrutti sono quasi intercambiabili per l'output semplice. Le differenze sono piccole ma vale la pena conoscerle:
| Caratteristica | print | echo |
|---|---|---|
| Valore di ritorno | sempre 1 | nessuno (non può essere usato nelle espressioni) |
| Numero di argomenti | esattamente uno | uno o più (separati da virgola) |
| Velocità relativa | leggermente più lento | leggermente più veloce |
In pratica entrambi sono sufficientemente veloci e la differenza di velocità non è mai rilevante. Si preferisce echo quando si vogliono stampare più valori contemporaneamente; si preferisce print quando è necessario un valore di ritorno. Per un confronto più approfondito, vedere PHP echo vs print.
Stampa di HTML
Come echo, print scrive semplicemente la stringa che gli viene fornita, quindi il markup HTML viene trasmesso direttamente alla pagina:
<?php
$title = "Welcome";
print "<h1>$title</h1>";
print "<p>This paragraph was generated with <code>print</code>.</p>";Il browser visualizza il risultato come HTML ordinario. Ricordarsi di effettuare l'escape dei dati forniti dall'utente (ad esempio con htmlspecialchars()) prima di stamparli, per evitare attacchi di cross-site scripting.
Riepilogo
printè un costrutto del linguaggio che restituisce una stringa e restituisce sempre1.- Le parentesi sono facoltative —
print "x"eprint("x")sono equivalenti. - Il suo valore di ritorno consente di utilizzarlo all'interno di espressioni e assegnazioni, a differenza di
echo. - Si usa
echoper più valori; si usaprintquando è necessario il valore di ritorno. - L'output (incluso HTML) viene scritto così com'è, quindi è necessario effettuare l'escape dei dati non attendibili prima.