Non sei loggato | Registrati | Login

Costrutti echo(), print() e stringhe heredoc Aggiungi

Tutorials / PHP

Benvenuto! Se sei un nuovo visitatore ti consiglio di iscriverti al mio Feed RSS in modo da essere sempre aggiornato riguardo l'uscita di nuovi articoli oppure sbirciare tra i tutorials ed i progetti.
Per avere un'idea del best-content presente in questo blog puoi leggere il post intitolato "Ed ora è il momento di rilanciare alcune iniziative! (1a parte e 2a parte)".
Buona navigazione e grazie per la visita!

Requisiti

  • Minima conoscenza del PHP

Visione generale

Partiamo subito dal dire che echo() e print() non sono funzioni bensì costrutti di linguaggio quindi con le seguenti conseguenze:

  • Non sono richieste le parentesi per inserire una lista di argomenti;
  • Non esiste il concetto di funzione variabile (ossia se ad una variabile aggiungiamo la parentesi aperta e chiusa alla fine, PHP non cercherà la funzione con il medesimo nome);

La funzione importante che svolgono questi due costrutti riguarda la possibilità di visualizzare stringhe di testo sulla pagina Web (oppure tramite linea di comando con il risultato nello standard output della console).

Il costrutto echo()

Partiamo subito esaminando un esempio semplice semplice:

  1. <?php
  2. $nome='Daniele';
  3. $cognome='Simonin';
  4.  
  5. echo "Nome:$nome<br/>Cognome:$cognome";
  6. /*
  7. Nome:Daniele
  8. Cognome:Simonin
  9. */
  10. ?>

Come si può notare definisco due variabile di tipo stringa con il mio nome e cognome per poi visualizzarlo con l'echo().
Nel costrutto echo() la specificazione delle stringhe può avvenire in due modi:

  • Utilizzando le virgolette doppie "";
  • Utilizzando le virgolette singole '';

La scelta non è per niente casuale visto che utilizzando le virgolette doppie ho diritto al seguente trattamento:

  • Qualunque variabile viene espansa (come nell'esempio);
  • Possibilità di usare un buon numero di sequenze di escape quali:
    • \n Per il ritorno a capo;
    • \r Il cursore salta all'inizio della riga corrente;
    • \t Tabulazione;
    • \\ Visualizza la barra rovesciata;
    • \$ Visualizza il dollaro;
    • \" Visualizza le doppie virgolette;
    • \[0-7] Carattere specificato in forma ottale in conformità con lo standard ASCII;
    • \x[0-9A-Fa-f] Carattere specificato in forma esadecimale in conformità con lo standard ASCII (ad esempio scrivendo \x4C viene visualizzato il carattere L);

Se invece usavamo le virgolette singole:

  • Nessuna variabile viene espansa;
  • Sequenze escape dei caratteri ridotta a:
    • \\ Visualizza la barra rovesciata;
    • \' Visualizza la virgoletta singola;

Proviamo quindi a verificare ciò modificando l'esempio precedente:

  1. <?php
  2. $nome='Daniele';
  3. $cognome='Simonin';
  4.  
  5. echo 'Nome:$nome<br/>Cognome:$cognome';
  6. /*
  7. Nome:$nome
  8. Cognome:$cognome
  9. */
  10. ?>

Come possiamo notare le variabili non vengono espanse ma scritte così come sono, ciò rende questa modalità più veloce di quella a virgolette doppie (ovviamente nel caso in cui non dobbiamo espandere alcuna variabile).

Ora esaminiamo un altro piccolo esempio:

  1. <?php
  2. $uno='uno';
  3.  
  4. echo "Se voglio che venga fuori \"unodue\" non scrivo $unodue
  5. ma ${uno}due";
  6. ?>

Se eseguite questo script riceverete un errore che dice "Notice: Undefined variable: unodue in c:\...\ on line 4" perchè PHP è andato alla ricerca della variabile $unodue non facendo ciò che ci aspettavamo (oddio non esageriamo :P).
Per risolvere il problema abbiamo racchiuso il nome della variabile tra le parentesi graffe mettendoci quindi il cuore in pace.
Un altra cosa da notare è come sia possibile suddividere una stringa su più righe magari rendendo il codice più leggibile (verrà comunque visualizzato su un unica riga a meno che non usiate il codice escape corrispondente al ritorno a capo oppure per il web il tag <br/>).
Ma se io ora voglio concatenare più stringhe come faccio?
Non è poi così difficile:

  1. <?php
  2. $nome='Daniele';
  3. $cognome='Simonin';
  4.  
  5. echo 'Nome completo:'.$nome.' '.$cognome;
  6. echo "Nome completo: $nome $cognome";
  7. /*
  8. Nome completo: Daniele Simonin
  9. Nome completo: Daniele Simonin
  10. */
  11. ?>

Come noterete l'output è uguale in tutti i due casi, con la sola differenza che nel primo metodo abbiamo usato l'operatore punto per unire le stringhe.

Print()

Il costrutto print() si comporta in maniera molto simile a quella dell'echo() tant'è vero che molte persone li considerano uguali, però ci sono delle differenze minimali quali:

  • Print() ha un comportamento simile a quello di una funzione, infatti restituisce sempre 1;
  • Echo() risulta leggermente più veloce del print() (si dice da un 3% al 4%) probabilmente dovuto al fatto che non restituisce alcun valore;

Soprattutto l'ultimo motivo porta molte persone a utilizzare l'echo().

Stringhe heredoc

Come sappiamo il costrutto echo() (o print()) stampa delle stringhe che PHP permette di identificare usando anche la sintassi heredoc.
Per delimitare le stringhe useremo "<<<" seguito da un identificatore per poi chiudere la stringa con lo stesso identificatore seguito da un punto e virgola ";" (che deve essere presente nella prima colonna della riga).
Ecco un esempio:

  1. <?php
  2. $nome='Daniele';
  3. $cognome='Simonin';
  4.  
  5. echo <<<DATI
  6. Nome: $nome
  7. <br/>
  8. Cognome: $cognome
  9. DATI;
  10. /*
  11. Nome: Daniele
  12. Cognome: Simonin
  13. */
  14. ?>

La stringa heredoc si comporta esattamente come quella con virgolette doppie quindi non c'è alcun motivo particolare per discriminare l'una o l'altra.
Alcuni possono preferire questo tipo di stringhe perchè l'identificatore (se scelto in modo opportuno) permette di capire quasi subito il contenuto della stringa.

Daniele Simonin 5 Settembre 2005 alle 19:13 Trackback URI

Scrivi un commento

Tags di formattazione:










* Sono ammessi solo commenti contenenti opinioni, correzioni e ogni forma di supporto al tutorial; è quindi vietato porre quesiti personali.

Leggi i 4 commenti

A me le heredoc non sono mai piaciute, ma non chiedermi perché :)

Commento di Napolux 12 Febbraio 2007 alle 13:46

Ottimo articolo. L'ho letto con vivo interesse, dato che mi sto avvicinando al php. Da tempo cercavo di capire la differenza tra echo e print. Grazie!

Commento di Alberto 15 Febbraio 2007 alle 18:33

Complimenti, i tuoi tutorial sono davvero ottimi.
Se posso permettermi solo un consiglio veloce: manca un tasto rapido x la stampa dell'articolo!!
Sarai linkato sicuramente sul mio sito tra i preferiti.
ciao e buon lavoro, Eagle

Commento di Eagleyes 3 Aprile 2007 alle 10:28

grazie mille :) vedrò cosa posso combinare per il suggerimento che mi hai dato.

Commento di Daniele Simonin 3 Aprile 2007 alle 10:33

Feed

infoPillole (by Wikipedia)

Ultimi commenti

  • flippetta: appena li ho visti sn diventati subito una...
  • Daniele Simonin: Ciao, in giro trovi una marea di guide a...
  • Daniele Simonin: i commenti sono sempre benvoluti ;)
  • chiara: scusate mi sapete dire che cos’è pdo e le...
  • oniduke: Immagino che non dobbiamo neanche commentare :D

Calendario

Maggio 2008
L M M G V S D
« Apr    
 1234
567891011
12131415161718
19202122232425
262728293031  

Archivio

Categorie

Tutorials casuali

Ultime news

Progetti

Alcuni miei lettori

Have a break