Qual è la differenza tra echo, print e print_r in PHP?


197

Io uso echoe print_rmolto, e quasi mai uso print.

Sento che echoè una macro ed print_rè un alias di var_dump.

Ma questo non è il modo standard per spiegare le differenze.


3
print_r non è esattamente un alias di var_dump, ma genera un formato diverso. In particolare, l'output di var_dump include anche il "tipo" di ciascuna variabile.
thomasrutter,


Un altro dettaglio da aggiungere e che può essere utile è che var_dump tronca testi molto lunghi, mostrando ... e indicando la lunghezza rimanente, ad esempio: even '... (lunghezza = 4482) Se usi l'eco questo non succede.
Giordania,

Risposte:


186

printe echosono più o meno gli stessi; sono entrambi costrutti di linguaggio che mostrano stringhe. Le differenze sono sottili: printha un valore di ritorno di 1, quindi può essere usato nelle espressioni mentre echoha un voidtipo di ritorno; echopuò assumere più parametri, sebbene tale utilizzo sia raro; echoè leggermente più veloce diprint . (Personalmente, lo uso sempre echo, mai print.)

var_dumpstampa un dump dettagliato di una variabile, incluso il suo tipo e il tipo di eventuali sotto-elementi (se si tratta di un array o un oggetto). print_rstampa una variabile in una forma più leggibile dall'uomo: le stringhe non vengono citate, le informazioni sul tipo vengono omesse, le dimensioni dell'array non vengono fornite, ecc.

var_dumpè di solito più utile rispetto print_ral debug, nella mia esperienza. È particolarmente utile quando non sai esattamente quali valori / tipi hai nelle tue variabili. Considera questo programma di test:

$values = array(0, 0.0, false, '');

var_dump($values);
print_r ($values);

Con print_rte non puoi distinguere tra 0e 0.0, oppure falsee '':

array(4) {
  [0]=>
  int(0)
  [1]=>
  float(0)
  [2]=>
  bool(false)
  [3]=>
  string(0) ""
}

Array
(
    [0] => 0
    [1] => 0
    [2] => 
    [3] => 
)

1
Cos'è la struttura del linguaggio?
omg

1
@Shore - è qualcosa incorporato nel linguaggio che non è una funzione. Sono generalmente molto veloci e non funzionano esattamente come le normali funzioni.
alex,

3
Modificato due anni dopo per correggere le inesattezze identificate in questi commenti. Grazie a tutti, devo aver dormito il 7 giugno 10. ;-)
John Kugelman,


5
Veloce, per l'avvocato mobile!
John Kugelman,

100

eco

  • Emette una o più stringhe separate da virgole
  • Nessun valore di ritorno

    per esempio echo "String 1", "String 2"

Stampa

  • Emette solo una singola stringa
  • Restituisce 1, quindi può essere utilizzato in un'espressione

    per esempio print "Hello"

    o, if ($expr && print "foo")

print_r ()

  • Uscite una rappresentazione leggibile di qualsiasi uno valore
  • Accetta non solo stringhe ma altri tipi tra cui array e oggetti, formattandoli in modo che siano leggibili
  • Utile durante il debug
  • Può restituire il suo output come valore di ritorno (invece di echo) se viene fornito il secondo argomento facoltativo

var_dump ()

  • Produce una rappresentazione leggibile dall'uomo di uno o più valori separati da virgole
  • Accetta non solo stringhe ma altri tipi tra cui array e oggetti, formattandoli in modo che siano leggibili
  • Utilizza un formato di output diverso print_r(), ad esempio stampa anche il tipo di valori
  • Utile durante il debug
  • Nessun valore di ritorno

var_export ()

  • Produce una rappresentazione leggibile dall'uomo e eseguibile in PHP di uno qualsiasi valore
  • Accetta non solo stringhe ma altri tipi tra cui array e oggetti, formattandoli in modo che siano leggibili
  • Utilizza un formato di output diverso per entrambi print_r()evar_dump() - l'output risultante è un codice PHP valido!
  • Utile durante il debug
  • Può restituire il suo output come valore di ritorno (invece di echo) se viene fornito il secondo argomento facoltativo

Appunti:

  • Anche se printpuò essere usato in un'espressione, consiglio alle persone di evitare di farlo, perché è dannoso per la leggibilità del codice (e perché è improbabile che sia mai utile). Le regole di precedenza quando interagiscono con altri operatori possono anche essere fonte di confusione. Per questo motivo, personalmente non ho mai motivo di usarlo echo.
  • Considerando echoche printsono costrutti di linguaggio print_r()e var_dump()/ var_export()sono funzioni regolari. Non sono necessarie parentesi per racchiudere gli argomenti a echooprint (e se li usi, verranno trattati come in un'espressione).
  • Sebbene var_export()restituisca un codice PHP valido che consenta di rileggere i valori in un secondo momento, basarsi su questo per il codice di produzione può rendere più semplice l'introduzione di vulnerabilità di sicurezza dovute alla necessità di utilizzare eval(). Sarebbe meglio usare un formato come JSON invece di archiviare e rileggere i valori. La velocità sarà comparabile.

3
Solo una breve nota su quando vuoi fare la echo $a, $b;sintassi quando puoi semplicemente fare echo $a . $b;: se $ ao $ b sono stringhe molto grandi, quest'ultima utilizzerà memoria e tempo extra creando una versione concatenata separata delle stringhe in memoria prima di essa può iniziare a inviare al browser.
Thomas Thomas

Ovviamente potresti echo $a; echo $b;anche usare anche tu .
thomasrutter,

16

Solo per aggiungere alla risposta di John ,echo dovrebbe essere l'unico che usi per stampare il contenuto sulla pagina.

printè leggermente più lento. var_dump()eprint_r() dovrebbe essere usato solo per il debug.

Inoltre degno di nota è che print_r()e var_dump()risuonano per impostazione predefinita, aggiungere un secondo argomento print_r()almeno che restituisce true per farlo ritornare invece, ad es print_r($array, TRUE).

Le differenze tra eco e ritorno sono:

  • echo: stampa immediatamente il valore sull'output.
  • return: restituirà l'output della funzione come stringa. Utile per la registrazione, ecc.

Solo perché hai sollevato il problema, qual è la differenza tra echoing e returning?
David dice di reintegrare Monica il

2
wow, vorrei sapere del parametro di ritorno :( in pratica puoi fare $ foo = print_r ($ array, true); e usarlo in altri modi (in un registro, una tabella, ecc.)
FryGuy

Ho usato print_rparecchio il parametro di ritorno mentre stavo programmando PHP. Tuttavia, tendevo a scrivere print_r( $foo, 1 );. È più veloce da scrivere;) E su questo su non mi interessa molto la leggibilità poiché trovo il nome print_rnon molto descrittivo.
exhuma,

var_dump()non supporta il secondo argomento consentendogli di restituire un valore come print_r()fa, perché var_dump()può accettare più argomenti per l'output.
thomasrutter,

@thomasrutter Vero, non so perché l'ho scritto.
alex,

6
echo

Non avendo tipo di ritorno

print

Tipo di restituzione

print_r()

Output come formattati,


5

La differenza tra echo , print , print_r e var_dump è molto semplice.

eco

echo in realtà non è una funzione ma un costrutto di linguaggio che viene utilizzato per stampare l'output. È leggermente più veloce della stampa.

echo "Hello World";    // this will print Hello World
echo "Hello ","World"; // Multiple arguments - this will print Hello World

$var_1=55;
echo "$var_1";               // this will print 55
echo "var_1=".$var_1;        // this will print var_1=55
echo 45+$var_1;              // this will print 100

$var_2="PHP";
echo "$var_2";                   // this will print PHP

$var_3=array(99,98,97)           // Arrays are not possible with echo (loop or index  value required)
$var_4=array("P"=>"3","J"=>"4"); // Arrays are not possible with echo (loop or index  value required)

Puoi anche usare l'istruzione echo con o senza parentesi

echo ("Hello World");   // this will print Hello World

Stampa

Proprio come l' eco build print è anche un costrutto linguistico e non una vera funzione. La differenza tra echo e print è che print accetta solo un singolo argomento e print restituisce sempre 1. Mentre l' eco non ha valore di ritorno. Quindi la dichiarazione di stampa può essere utilizzata nelle espressioni.

print "Hello World";    // this will print Hello World
print "Hello ","World"; // Multiple arguments - NOT POSSIBLE with print
$var_1=55;
print "$var_1";               // this will print 55
print "var_1=".$var_1;        // this will print var_1=55
print 45+$var_1;              // this will print 100

$var_2="PHP";
print "$var_2";                   // this will print PHP

$var_3=array(99,98,97)           // Arrays are not possible with print (loop or index  value required)
$var_4=array("P"=>"3","J"=>"4"); // Arrays are not possible with print (loop or index  value required)

Proprio come l' eco , la stampa può essere utilizzata con o senza parentesi.

print ("Hello World");   // this will print Hello World

print_r

La funzione print_r () viene utilizzata per stampare informazioni leggibili dall'uomo su una variabile. Se l'argomento è un array, la funzione print_r () stampa le sue chiavi e i suoi elementi (lo stesso per gli oggetti).

print_r ("Hello World");    // this will print Hello World

$var_1=55;
print_r ("$var_1");               // this will print 55
print_r ("var_1=".$var_1);        // this will print var_1=55
print_r (45+$var_1);              // this will print 100

$var_2="PHP";
print_r ("$var_2");                // this will print PHP

$var_3=array(99,98,97)             // this will print Array ( [0] => 1 [1] => 2 [2] => 3 ) 
$var_4=array("P"=>"3","J"=>"4");   // this will print  Array ( [P] => 3 [J] => 4 ) 

var_dump

La funzione var_dump viene solitamente utilizzata per il debug e stampa le informazioni (tipo e valore) su una variabile / matrice / oggetto.

var_dump($var_1);     // this will print  int(5444) 
var_dump($var_2);     // this will print  string(5) "Hello" 
var_dump($var_3);     // this will print  array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } 
var_dump($var_4);     // this will print  array(2) { ["P"]=> string(1) "3" ["J"]=> string(1) "4" }

3

Eco :

È un'istruzione non una funzione Nessun valore restituito

Non necessarie le parentesi

Non matrice di stampa

Stampa

È la vera funzione

Tipo di ritorno 1

Richiesto tra parentesi

Non matrice di stampa

print_r

Stampa in formato leggibile dall'uomo

Stringa non tra virgolette

Informazioni non dettagliate sulla variabile come type e all

var_dump

Tutte le informazioni di dump di variabili come tipo di elemento e sottoelemento


2
Ci sono così tanti problemi con questa risposta. nonprint è una vera funzione, è un costrutto linguistico proprio come l'eco. Può anche essere usato come una dichiarazione. non è un'affermazione né può essere utilizzata in una. non non richiede parentesi, né sia eco o stampare utilizzare le parentesi come una funzione avrebbe fatto. Hai anche perso una delle differenze principali: l'eco accetta più stringhe per l'eco separate da virgole. echoprint
thomasrutter,

2
... e hai inviato questa risposta quando esistevano già diverse risposte e contenevano le informazioni corrette .
thomasrutter,

2

** Echocan accetta più espressioni mentre la stampa non può. La funzione Print_r () PHP viene utilizzata per restituire un array in una forma leggibile dall'uomo. È semplicemente scritto come

![Print_r ($your_array)][1]

2

echo: echo è un costrutto linguistico in cui non è necessario utilizzare le parentesi con esso e può accettare qualsiasi numero di parametri e restituire il vuoto.

   void echo (param1,param2,param3.....);

   Example: echo "test1","test2,test3";

stampa: è un costrutto linguistico in cui non è necessario utilizzare le parentesi, basta prendere un parametro e restituire

    1 always.

           int print(param1);

           print "test1";
           print "test1","test2"; // It will give syntax error

prinf: è una funzione che richiede almeno una stringa e uno stile di formato e restituisce la lunghezza della stringa di output.

    int printf($string,$s);

    $s= "Shailesh";
    $i= printf("Hello %s how are you?",$s);    
    echo $i;

    Output : Hello Shailesh how are you?
             27



   echo returns void so its execution is faster than print and printf


0

print_r () può stampare il valore ma anche se il secondo parametro flag viene passato ed è VERO - restituirà il risultato stampato come stringa e nulla verrà inviato all'output standard. Informazioni su var_dump. Se il debugger XDebug è installato, i risultati di output verranno formattati in modo molto più leggibile e comprensibile.


-1

entrambi sono costrutti di linguaggio. echo restituisce void e stampa restituisce 1. echo è considerato leggermente più veloce della stampa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.