Quelle est la différence entre echo, print et print_r en PHP?

197

Je l' utilise echoet print_rbeaucoup, et presque jamais utiliser print.

Je pense que echoc'est une macro et print_run alias de var_dump.

Mais ce n'est pas la manière standard d'expliquer les différences.

Mak
la source
3
print_r n'est pas exactement un alias de var_dump - il sort dans un format différent. Notamment, la sortie de var_dump inclut également le "type" de chaque variable.
thomasrutter
Un autre détail à ajouter et qui peut être utile, est que var_dump tronque les textes très longs, montrant ... et indiquant la longueur restante, par exemple: même '... (longueur = 4482) Si vous utilisez l'écho, cela ne se produit pas.
Yordan

Réponses:

186

printet echosont plus ou moins les mêmes; ce sont deux constructions de langage qui affichent des chaînes. Les différences sont subtiles: printa une valeur de retour de 1, elle peut donc être utilisée dans des expressions alors qu'elle echoa un voidtype de retour; echopeut prendre plusieurs paramètres, bien qu'une telle utilisation soit rare; echoest légèrement plus rapide queprint . (Personnellement, j'utilise toujours echo, jamais print.)

var_dumpaffiche un vidage détaillé d'une variable, y compris son type et le type de tous les sous-éléments (s'il s'agit d'un tableau ou d'un objet). print_rimprime une variable sous une forme plus lisible par l'homme: les chaînes ne sont pas citées, les informations de type sont omises, les tailles de tableau ne sont pas données, etc.

var_dumpest généralement plus utile que print_rlors du débogage, selon mon expérience. C'est particulièrement utile lorsque vous ne savez pas exactement quelles valeurs / types vous avez dans vos variables. Considérez ce programme de test:

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

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

Avec print_rvous ne pouvez pas faire la différence entre 0et 0.0, ou falseet '':

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

Array
(
    [0] => 0
    [1] => 0
    [2] => 
    [3] => 
)
John Kugelman
la source
1
Qu'est-ce que la construction du langage?
omg
1
@Shore - c'est quelque chose construit dans le langage qui n'est pas une fonction. Ils sont généralement très rapides et ne fonctionnent pas exactement comme les fonctions normales.
alex
3
Révisé deux ans plus tard pour corriger les inexactitudes identifiées dans ces commentaires. Merci à tous, j'ai dû dormir le 7 juin 10. ;-)
John Kugelman
5
Vite, à l'avocat mobile!
John Kugelman
100

écho

  • Génère une ou plusieurs chaînes séparées par des virgules
  • Aucune valeur de retour

    par exemple echo "String 1", "String 2"

impression

  • Ne produit qu'une seule chaîne
  • Retour 1 , donc il peut être utilisé dans une expression

    par exemple print "Hello"

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

print_r ()

  • Les sorties d' une représentation lisible par l' homme, quelle une valeur
  • Accepte non seulement les chaînes mais d'autres types, y compris les tableaux et les objets, en les formatant pour être lisibles
  • Utile lors du débogage
  • Peut renvoyer sa sortie sous forme de valeur de retour (au lieu d'écho) si le deuxième argument facultatif est donné

var_dump ()

  • Produit une représentation lisible par l'homme d' un ou plusieurs valeurs séparées par des virgules
  • Accepte non seulement les chaînes mais d'autres types, y compris les tableaux et les objets, en les formatant pour être lisibles
  • Utilise un format de sortie différent pour print_r(), par exemple, il imprime également le type de valeurs
  • Utile lors du débogage
  • Aucune valeur de retour

var_export ()

  • Les sorties d' un lisible par l' homme et PHP-exécutable représentation de tout un valeur
  • Accepte non seulement les chaînes mais d'autres types, y compris les tableaux et les objets, en les formatant pour être lisibles
  • Utilise un format de sortie différent pour print_r()etvar_dump() - la sortie résultante est un code PHP valide!
  • Utile lors du débogage
  • Peut renvoyer sa sortie sous forme de valeur de retour (au lieu d'écho) si le deuxième argument facultatif est donné

Remarques:

  • Même s'il printpeut être utilisé dans une expression, je recommande aux gens d'éviter de le faire, car il est mauvais pour la lisibilité du code (et parce qu'il est peu probable qu'il soit utile). Les règles de priorité quand il interagit avec d'autres opérateurs peuvent également prêter à confusion. Pour cette raison, je n'ai personnellement jamais de raison de l'utiliser echo.
  • Alors que echoet printsont des constructions de langage, print_r()et var_dump()/ var_export()sont des fonctions régulières. Vous n'avez pas besoin de parenthèses pour entourer les arguments de echoou print(et si vous les utilisez, ils seront traités comme ils le feraient dans une expression).
  • Bien que var_export()renvoie un code PHP valide permettant de relire les valeurs plus tard, le fait de s'en remettre au code de production peut faciliter l'introduction de vulnérabilités de sécurité en raison de la nécessité d'utiliser eval(). Il serait préférable d'utiliser un format comme JSON à la place pour stocker et relire les valeurs. La vitesse sera comparable.
thomasrutter
la source
3
Juste une petite note sur le moment où vous voudriez la echo $a, $b;syntaxe quand vous pouvez simplement le faire echo $a . $b;: si $ a ou $ b sont des chaînes vraiment grandes, alors ce dernier utilisera de la mémoire supplémentaire et du temps pour créer une version concaténée séparée des chaînes en mémoire avant peut commencer à sortir soit vers le navigateur.
thomasrutter le
Bien sûr, vous pouvez aussi l'utiliser echo $a; echo $b;.
thomasrutter du
16

Juste pour ajouter à la réponse de John , echodevrait être le seul que vous utilisez pour imprimer du contenu sur la page.

printest légèrement plus lent. var_dump()et print_r()ne doit être utilisé que pour déboguer.

Il convient également de mentionner que print_r()et var_dump()fera écho par défaut, ajoutez print_r()au moins un deuxième argument qui vaut true pour le faire revenir à la place, par exempleprint_r($array, TRUE) .

La différence entre l'écho et le retour sont:

  • echo: imprime immédiatement la valeur dans la sortie.
  • return: renvoie la sortie de la fonction sous forme de chaîne. Utile pour la journalisation, etc.
alex
la source
Juste parce que vous avez en quelque sorte soulevé la question, quelle est la différence entre echoing et returning?
David dit de réintégrer Monica
2
wow, j'aurais aimé connaître le paramètre de retour :( en gros, vous pouvez faire $ foo = print_r ($ array, true); et l'utiliser autrement (dans un journal, une table, etc.)
FryGuy
J'ai print_rbeaucoup utilisé le paramètre de retour pendant que je codais PHP. Cependant, j'avais tendance à écrire print_r( $foo, 1 );. C'est plus rapide à taper;) Et à ce sujet, je ne me soucie pas beaucoup de la lisibilité car je trouve que le nom print_rn'est pas très descriptif non plus.
exhuma
var_dump()ne prend pas en charge le deuxième argument lui permettant de renvoyer une valeur comme le print_r()fait, car il var_dump()peut accepter plusieurs arguments pour la sortie.
thomasrutter
@thomasrutter C'est vrai, je ne sais pas pourquoi j'ai écrit ça.
alex
6
echo

Ne pas avoir de type de retour

print

Avoir un type de retour

print_r()

Sorties telles que formatées,

user1899888
la source
5

La différence entre echo , print , print_r et var_dump est très simple.

écho

echo n'est en fait pas une fonction mais une construction de langage qui est utilisée pour imprimer la sortie. Il est légèrement plus rapide que l'impression.

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)

Vous pouvez également utiliser l'instruction echo avec ou sans parenthèse

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

impression

Tout comme la construction d' écho, l' impression est également une construction de langage et non une fonction réelle. La différence entre echo et print est que print n'accepte qu'un seul argument et print renvoie toujours 1. Alors que echo n'a pas de valeur de retour. Donc, l' instruction print peut être utilisée dans les expressions.

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)

Tout comme l' écho , l' impression peut être utilisée avec ou sans parenthèses.

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

print_r

La fonction print_r () est utilisée pour imprimer des informations lisibles par l'homme sur une variable. Si l'argument est un tableau, la fonction print_r () affiche ses clés et ses éléments (idem pour les objets).

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

fonction var_dump habituellement utilisée pour le débogage et affiche les informations (type et valeur) sur une variable / tableau / objet.

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
la source
3

Écho :

C'est une instruction et non une fonction Aucune valeur de retour

Non requis les parenthèses

Ne pas imprimer le tableau

Impression

C'est une vraie fonction

Type de retour 1

Obligatoire les parenthèses

Ne pas imprimer le tableau

Print_r

Impression au format lisible par l'homme

Chaîne absente des guillemets

Pas d'informations détaillées de type variable et tout

var_dump

Toutes les informations de vidage de variable comme le type d'élément et le sous-élément

Souterrain
la source
2
Il y a tellement de problèmes avec cette réponse. printn'est pas une fonction réelle, c'est une construction de langage comme echo. Il peut également être utilisé comme une déclaration. echon'est pas une déclaration et ne peut pas être utilisée en une seule. printne nécessite pas de parenthèses, ni l'écho ni l'impression n'utilisent les parenthèses comme le ferait une fonction. Vous avez également manqué l'une des principales différences - l'écho accepte plusieurs chaînes à l'écho séparées par des virgules.
thomasrutter
2
... et vous avez soumis cette réponse alors que plusieurs réponses existaient déjà et contenaient les informations correctes .
thomasrutter
2

** Echocan accepte plusieurs expressions alors que l'impression ne le peut pas. La fonction PHP Print_r () est utilisée pour renvoyer un tableau sous une forme lisible par l'homme. Il est simplement écrit

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

echo: echo est une construction de langage où il n'est pas nécessaire d'utiliser des parenthèses avec lui et il peut prendre n'importe quel nombre de paramètres et retourner void.

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

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

print: c'est une construction de langage où il n'est pas nécessaire d'utiliser des parenthèses, il suffit de prendre un paramètre et de retourner

    1 always.

           int print(param1);

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

prinf: C'est une fonction qui prend au moins une chaîne et un style de format et renvoie la longueur de la chaîne de sortie.

    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
la source
2

print_r() est utilisé pour imprimer la matrice dans un format lisible par l'homme.

vaibhav kulkarni
la source
0

print_r () peut imprimer la valeur mais aussi si le second paramètre indicateur est passé et est VRAI - il retournera le résultat imprimé sous forme de chaîne et rien ne sera envoyé à la sortie standard. À propos de var_dump. Si le débogueur XDebug est installé, les résultats de sortie seront formatés de manière beaucoup plus lisible et compréhensible.

Rinat
la source
-1

ils sont tous deux des constructions de langage. echo renvoie void et print renvoie 1. echo est considéré comme légèrement plus rapide que print.

tester
la source