203 votes

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

J'utilise echo et print_r beaucoup, et n'utilisent presque jamais l'impression.

Je sens echo est une macro, et print_r est un alias de var_dump .

Mais ce n'est pas la façon habituelle d'expliquer les différences.

3 votes

Print_r n'est pas exactement un alias de var_dump - il produit dans un format différent. Notamment, la sortie de var_dump inclut également le "type" de chaque variable.

0 votes

0 votes

Un autre détail à ajouter et qui peut être utile, est que var_dump tronque les textes très longs, en montrant ... et en indiquant la longueur restante, par exemple : même '.... (longueur = 4482) Si vous utilisez echo, cela ne se produit pas.

188voto

John Kugelman Points 108754

print et echo sont plus ou moins les mêmes ; ce sont tous deux des constructions linguistiques qui affichent des chaînes de caractères. Les différences sont subtiles : print a une valeur de retour de 1, il peut donc être utilisé dans des expressions alors que echo a un void type de retour ; echo peut prendre plusieurs paramètres, bien que cette utilisation soit rare ; echo est légèrement plus rapide que print . (Personnellement, j'utilise toujours echo jamais print .)

var_dump affiche une description détaillée d'une variable, y compris son type et le type de ses sous-éléments (s'il s'agit d'un tableau ou d'un objet). print_r imprime une variable sous une forme plus lisible pour l'homme : les chaînes de caractères ne sont pas citées, les informations de type sont omises, les tailles des tableaux ne sont pas indiquées, etc.

var_dump est généralement plus utile que print_r lors du débogage, d'après 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_r vous ne pouvez pas faire la différence entre 0 et 0.0 ou false et '' :

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

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

1 votes

Qu'est-ce que la construction linguistique ?

1 votes

@Shore - c'est quelque chose de construit dans le langage qui n'est pas une fonction. Ils sont généralement très rapides, et ne fonctionnent pas exactement comme des fonctions normales.

3 votes

Édité deux ans plus tard pour corriger les inexactitudes identifiées dans ces commentaires. Merci à tous, je devais dormir le 7 juin 2010 ;-)

101voto

thomasrutter Points 42905

echo

  • Produit une ou plusieurs chaînes de caractères séparées par des virgules.
  • Pas de valeur de retour

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

imprimer

  • Ne produit qu'une seule chaîne de caractères
  • Renvoie à 1 afin qu'il puisse être utilisé dans une expression

    par exemple print "Hello"

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

print_r()

  • Produit une représentation lisible par l'homme de toute un valeur
  • Accepte non seulement les chaînes de caractères, mais aussi d'autres types, notamment les tableaux et les objets, et les formate pour qu'ils soient lisibles.
  • Utile pour le débogage
  • Peut retourner sa sortie en tant que valeur de retour (au lieu de l'écho) si le deuxième argument optionnel est donné

var_dump()

  • Produit une représentation lisible par l'homme de un ou plusieurs valeurs séparées par des virgules
  • Accepte non seulement les chaînes de caractères, mais aussi d'autres types, notamment les tableaux et les objets, et les formate pour qu'ils soient lisibles.
  • Utilise un format de sortie différent de print_r() par exemple, il imprime également le type de valeurs
  • Utile pour le débogage
  • Pas de valeur de retour

Notes :

  • Même si print peut être utilisé dans une expression, j'éviterais généralement de le faire pour des raisons de lisibilité (et parce qu'il est peu probable que cela soit jamais utile). Les règles de précédence lorsqu'il interagit avec d'autres opérateurs peuvent également prêter à confusion.
  • Considérant que echo et print sont des constructions linguistiques, print_r() et var_dump() sont des fonctions régulières. Vous n'avez pas besoin de parenthèses pour encadrer les arguments de la fonction echo ou print (et si vous les utilisez, ils seront traités comme ils le seraient dans une expression).

3 votes

Juste une petite remarque sur le moment où vous voudriez que la echo $a, $b; alors que vous pouvez simplement faire echo $a . $b; si $a ou $b sont des chaînes de caractères très volumineuses, cette dernière utilisera de la mémoire et du temps supplémentaires pour créer une version concaténée séparée des chaînes de caractères en mémoire avant de pouvoir commencer à les afficher dans le navigateur.

0 votes

Bien sûr, vous pourriez simplement utiliser echo $a; echo $b; aussi.

16voto

alex Points 186293

Juste pour ajouter à La réponse de Jean , echo doit être le seul que vous utilisez pour imprimer du contenu sur la page.

print est légèrement plus lent. var_dump() et print_r() ne doit être utilisé que pour le débogage.

Il convient également de mentionner que print_r() et var_dump() fera écho par défaut, ajoutez un deuxième argument à print_r() au moins qui évalue à true pour qu'il retourne à la place, par exemple print_r($array, TRUE) .

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

  • écho : Imprime immédiatement la valeur sur la sortie.
  • retournant : Retourne la sortie de la fonction sous forme de chaîne. Utile pour la journalisation, etc.

0 votes

Juste parce que vous avez en quelque sorte soulevé la question, quelle est la différence entre echo et return de l'UE ?

2 votes

J'aurais aimé connaître le paramètre de retour :( en fait, vous pouvez faire $foo = print_r($array, true) ; et l'utiliser d'autres façons (dans un journal, un tableau, etc.).

0 votes

J'ai utilisé le print_r renvoyer le paramètre assez souvent lorsque 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 de l'entreprise n'a rien à voir avec les autres. print_r pas très descriptive non plus.

6voto

user1899888 Points 31
echo

Ne pas avoir de type de retour

print

Avoir un type de retour

print_r()

Les sorties sont formatées,

3voto

Bhupendra Points 388

Echo :

Il s'agit d'une déclaration et non d'une fonction Pas de valeur de retour

Non requis les parenthèses

Pas d'impression du tableau

Imprimer

C'est une fonction réelle

Type de retour 1

Requis les parenthèses

Pas d'impression du tableau

Imprimer_r

Imprimer dans un format lisible par l'homme

String not in Quotes

Pas d'informations détaillées sur la variable, comme le type et tout le reste

var_dump

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

2 votes

Il y a tellement de problèmes avec cette réponse. print est pas une véritable fonction, c'est une construction du langage tout comme echo. Elle peut également être utilisée comme une déclaration. echo est pas une déclaration ni ne peut être utilisé dans une déclaration. print fait pas ne nécessitent pas de parenthèses, et ni echo ni print n'utilisent les parenthèses comme le ferait une fonction. Vous avez également omis l'une des principales différences - echo accepte plusieurs chaînes à répercuter séparées par des virgules.

2 votes

... et vous avez soumis cette réponse alors que plusieurs réponses existaient déjà et contenaient la correct informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X