Was ist der Unterschied zwischen echo, print und print_r in PHP?

197

Ich benutze echound print_rviel und fast nie print.

Ich denke, es echoist ein Makro und print_rein Alias ​​von var_dump.

Dies ist jedoch nicht die Standardmethode, um die Unterschiede zu erklären.

Mak
quelle
3
print_r ist nicht gerade ein Alias ​​von var_dump - es wird in einem anderen Format ausgegeben. Insbesondere enthält die Ausgabe von var_dump auch den "Typ" jeder Variablen.
Thomasrutter
Ein weiteres Detail, das hinzugefügt werden muss und das nützlich sein kann, ist, dass var_dump sehr lange Texte abschneidet, ... anzeigt und die verbleibende Länge angibt, zum Beispiel: sogar '... (Länge = 4482) Wenn Sie Echo verwenden, geschieht dies nicht.
Yordan

Antworten:

186

printund echosind mehr oder weniger gleich; Sie sind beide Sprachkonstrukte, die Zeichenfolgen anzeigen. Die Unterschiede sind subtil: printhat einen Rückgabewert von 1, sodass er in Ausdrücken verwendet werden kann, während er echoeinen voidRückgabetyp hat; echokann mehrere Parameter annehmen, obwohl eine solche Verwendung selten ist; echoist etwas schneller alsprint . (Ich persönlich benutze immer echo, nie print.)

var_dumpdruckt einen detaillierten Speicherauszug einer Variablen aus, einschließlich ihres Typs und des Typs aller Unterelemente (wenn es sich um ein Array oder ein Objekt handelt). print_rGibt eine Variable in einer besser lesbaren Form aus: Zeichenfolgen werden nicht in Anführungszeichen gesetzt, Typinformationen werden weggelassen, Arraygrößen werden nicht angegeben usw.

var_dumpist print_rmeiner Erfahrung nach normalerweise nützlicher als beim Debuggen. Dies ist besonders nützlich, wenn Sie nicht genau wissen, welche Werte / Typen Ihre Variablen enthalten. Betrachten Sie dieses Testprogramm:

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

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

Mit print_rkann man den Unterschied zwischen 0und 0.0, und falseund nicht erkennen '':

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

Array
(
    [0] => 0
    [1] => 0
    [2] => 
    [3] => 
)
John Kugelman
quelle
1
Was ist Sprachkonstruktion?
Omg
1
@Shore - es ist etwas in die Sprache eingebaut, das keine Funktion ist. Sie sind im Allgemeinen sehr schnell und funktionieren nicht genau wie normale Funktionen.
Alex
3
Zwei Jahre später bearbeitet, um die in diesen Kommentaren festgestellten Ungenauigkeiten zu korrigieren. Vielen Dank, ich muss am 7. Juni 10 geschlafen haben. ;-)
John Kugelman
5
Schnell zum Anwalt Handy!
John Kugelman
100

Echo

  • Gibt eine oder mehrere durch Kommas getrennte Zeichenfolgen aus
  • Kein Rückgabewert

    z.B echo "String 1", "String 2"

drucken

  • Gibt nur eine einzelne Zeichenfolge aus
  • Gibt zurück 1, damit es in einem Ausdruck verwendet werden kann

    z.B print "Hello"

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

print_r ()

  • Gibt ein für Menschen lesbare Repräsentation eines einem Wert
  • Akzeptiert nicht nur Zeichenfolgen, sondern auch andere Typen, einschließlich Arrays und Objekte, und formatiert sie so, dass sie lesbar sind
  • Nützlich beim Debuggen
  • Kann seine Ausgabe als Rückgabewert zurückgeben (anstatt zu wiederholen), wenn das zweite optionale Argument angegeben wird

var_dump ()

  • Gibt eine lesbare Darstellung eines oder mehrerer durch Kommas getrennter Werte aus
  • Akzeptiert nicht nur Zeichenfolgen, sondern auch andere Typen, einschließlich Arrays und Objekte, und formatiert sie so, dass sie lesbar sind
  • Verwendet ein anderes Ausgabeformat print_r(), um beispielsweise auch den Wertetyp zu drucken
  • Nützlich beim Debuggen
  • Kein Rückgabewert

var_export ()

  • Gibt einen für Menschen lesbaren und PHP-ausführbare Darstellung jedes einen Wert
  • Akzeptiert nicht nur Zeichenfolgen, sondern auch andere Typen, einschließlich Arrays und Objekte, und formatiert sie so, dass sie lesbar sind
  • Verwendet ein anderes Ausgabeformat als beide print_r()und var_dump()- die resultierende Ausgabe ist gültiger PHP-Code!
  • Nützlich beim Debuggen
  • Kann seine Ausgabe als Rückgabewert zurückgeben (anstatt zu wiederholen), wenn das zweite optionale Argument angegeben wird

Anmerkungen:

  • Obwohl printes in einem Ausdruck verwendet werden kann, empfehle ich, dies zu vermeiden, da dies die Lesbarkeit des Codes beeinträchtigt (und es unwahrscheinlich ist, dass es jemals nützlich sein wird). Die Vorrangregeln bei der Interaktion mit anderen Operatoren können ebenfalls verwirrend sein. Aus diesem Grund habe ich persönlich nie einen Grund, es zu überarbeiten echo.
  • Während echound printsind Sprachkonstrukte print_r()und var_dump()/ var_export()oder reguläre Funktionen. Sie benötigen keine Klammern, um die Argumente in echooder einzuschließen print(und wenn Sie sie verwenden, werden sie wie in einem Ausdruck behandelt).
  • Während var_export()gültiger PHP-Code zurückgegeben wird, mit dem Werte später zurückgelesen werden können, kann es aufgrund der Verwendung einfacher sein, Sicherheitslücken einzuführen, wenn Sie sich für Produktionscode darauf verlassen eval(). Es ist besser, ein Format wie JSON zu verwenden, um Werte zu speichern und zurückzulesen. Die Geschwindigkeit wird vergleichbar sein.
thomasrutter
quelle
3
Nur eine kurze Anmerkung darüber, wann Sie die echo $a, $b;Syntax möchten, wenn Sie dies nur tun können echo $a . $b;: Wenn entweder $ a oder $ b wirklich große Zeichenfolgen sind, benötigt letzterer zusätzlichen Speicher und Zeit, um eine separate verkettete Version der Zeichenfolgen im Speicher davor zu erstellen kann entweder an den Browser ausgeben.
Thomasrutter
Natürlich können Sie auch nur verwenden echo $a; echo $b;.
Thomasrutter
16

Nur um Johns Antwort zu ergänzen , echosollte dies die einzige sein, mit der Sie Inhalte auf die Seite drucken.

printist etwas langsamer. var_dump()und print_r()sollte nur zum Debuggen verwendet werden.

Erwähnenswert ist auch, dass print_r()und var_dump()wird standardmäßig wiedergegeben, fügen Sie print_r()mindestens ein zweites Argument hinzu , das als wahr ausgewertet wird, damit es stattdessen zurückkehrt, z print_r($array, TRUE).

Der Unterschied zwischen Echo und Rückkehr ist:

  • echo: Druckt den Wert sofort auf die Ausgabe.
  • Rückgabe: Gibt die Ausgabe der Funktion als Zeichenfolge zurück. Nützlich für die Protokollierung usw.
Alex
quelle
Nur weil Sie das Problem angesprochen haben, was ist der Unterschied zwischen echoing und returning?
David sagt, Monica
2
wow, ich wünschte, ich wüsste etwas über den Rückgabeparameter :( Grundsätzlich können Sie $ foo = print_r ($ array, true) ausführen und auf andere Weise verwenden (in ein Protokoll, eine Tabelle usw.)
FryGuy
Ich habe den print_rRückgabeparameter ziemlich oft verwendet, während ich PHP programmiert habe . Ich neigte jedoch dazu zu schreiben print_r( $foo, 1 );. Es ist schneller zu tippen;) Und darüber interessiert mich die Lesbarkeit print_rnicht so sehr, da ich finde, dass der Name auch nicht sehr aussagekräftig ist.
Exhuma
var_dump()unterstützt das zweite Argument nicht, sodass es einen Wert zurückgeben kann print_r(), da var_dump()mehrere Argumente für die Ausgabe akzeptiert werden können.
Thomasrutter
@ Thomasrutter Stimmt, nicht sicher, warum ich das geschrieben habe.
alex
6
echo

Kein Rückgabetyp

print

Rückgabetyp haben

print_r()

Ausgaben wie formatiert,

user1899888
quelle
5

Der Unterschied zwischen echo , print , print_r und var_dump ist sehr einfach.

Echo

Echo ist eigentlich keine Funktion, sondern ein Sprachkonstrukt, mit dem die Ausgabe gedruckt wird. Es ist geringfügig schneller als der Druck.

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)

Sie können die Echo-Anweisung auch mit oder ohne Parenthese verwenden

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

drucken

Genau wie das Echo- Konstrukt ist auch das Drucken ein Sprachkonstrukt und keine echte Funktion. Der Unterschied zwischen Echo und Print besteht darin, dass print nur ein einziges Argument akzeptiert und print immer 1 zurückgibt. Während echo keinen Rückgabewert hat. Die print- Anweisung kann also in Ausdrücken verwendet werden.

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)

Genau wie Echo kann Print mit oder ohne Klammern verwendet werden.

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

print_r

Mit der Funktion print_r () werden lesbare Informationen zu einer Variablen gedruckt. Wenn das Argument ein Array ist, druckt die Funktion print_r () ihre Schlüssel und Elemente (dasselbe gilt für Objekte).

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

Die Funktion var_dump wird normalerweise zum Debuggen verwendet und gibt die Informationen (Typ und Wert) zu einer Variablen / einem Array / einem Objekt aus.

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" }
N Randhawa
quelle
3

Echo :

Es ist eine Anweisung, keine Funktion. Kein Rückgabewert

Nicht erforderlich die Klammern

Array nicht drucken

Drucken

Es ist eine echte Funktion

Geben Sie Typ 1 zurück

Benötigte die Klammern

Array nicht drucken

Print_r

Drucken Sie in lesbarem Format

Zeichenfolge nicht in Anführungszeichen

Nicht Detailinformationen von Variablen wie Typ und alle

var_dump

Alle Dump-Informationen von Variablen wie Elementtyp und Unterelement

Unter Tage
quelle
2
Es gibt so viele Probleme mit dieser Antwort. printist keine echte Funktion, es ist ein Sprachkonstrukt wie Echo. Es kann auch als Anweisung verwendet werden. echoist keine Aussage und kann auch nicht in einer verwendet werden. printerfordert weder Klammern, noch verwenden Echo oder Druck die Klammern wie eine Funktion. Sie haben auch einen der Hauptunterschiede übersehen: echo akzeptiert mehrere durch Kommas getrennte Zeichenfolgen.
Thomasrutter
2
... und Sie haben diese Antwort eingereicht, als bereits mehrere Antworten vorhanden waren und die richtigen Informationen enthielten .
Thomasrutter
2

** Echocan akzeptiert mehrere Ausdrücke, während der Druck nicht möglich ist. Die PHP-Funktion Print_r () wird verwendet, um ein Array in einer für Menschen lesbaren Form zurückzugeben. Es ist einfach geschrieben als

![Print_r ($your_array)][1]
shaik afroz
quelle
2

echo: echo ist ein Sprachkonstrukt, bei dem keine Klammern verwendet werden müssen. Es kann eine beliebige Anzahl von Parametern annehmen und void zurückgeben.

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

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

print: Es handelt sich um ein Sprachkonstrukt, bei dem keine Klammern verwendet werden müssen. Es wird nur ein Parameter verwendet und zurückgegeben

    1 always.

           int print(param1);

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

prinf: Dies ist eine Funktion, die mindestens eine Zeichenfolge und einen Formatstil verwendet und die Länge der Ausgabezeichenfolge zurückgibt.

    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
Shailesh Thapa
quelle
2

print_r() wird zum Drucken des Arrays in einem für Menschen lesbaren Format verwendet.

vaibhav kulkarni
quelle
0

print_r () kann einen Wert ausdrucken, aber auch, wenn der zweite Flag-Parameter übergeben wird und TRUE ist - er gibt das gedruckte Ergebnis als Zeichenfolge zurück und sendet nichts an die Standardausgabe. Über var_dump. Wenn der XDebug-Debugger installiert ist, werden die Ausgabeergebnisse viel besser lesbar und verständlicher formatiert.

Rinat
quelle
-1

beide sind Sprachkonstrukte. echo gibt void zurück und print gibt zurück 1. echo wird als etwas schneller als print angesehen.

Prüfung
quelle