echo
et print
.
Une première définition : les structures de langage
Commençons déjà par définir ce qu’on appelle « structure de langage » (« language construct » en anglais) afin de partir sur de bonnes bases.
Une structure de langage correspond simplement à une partie de la syntaxe d’un langage. La syntaxe d’un langage informatique correspond à un ensemble de mots clefs au sens bien défini par le langage. A partir de cette syntaxe, et en combinant les mots clefs, nous allons pouvoir construire des expressions.
Les structures de langage sont en d’autres termes les atomes d’un langage informatique : ce sont les unités de base d’un langage qu’on va pouvoir utiliser pour construire des expressions.
Je tenais à commencer ce chapitre avec cette définition car de nombreuses personnes considèrent à tort que les structures de langage echo
et print
sont des fonctions. Or, les fonctions et les structures de langage sont deux types différents d’objets qui ne vont pas être traités de la même façon.
A votre niveau, il risque néanmoins d’être compliqué de bien comprendre et de bien vous représenter ce qu’est une structure de langage. Ne vous inquiétez pas, c’est tout à fait normal : bien souvent, en code, une notion nécessite de connaitre un ensemble d’autres notions pour être bien comprise tandis que les autres notions ont besoin de cette première notion pour être comprises… C’est toute la difficulté lorsqu’on commence à apprendre un nouveau langage !
Essayez donc de retenir cette première définition et vous allez voir que celle-ci va devenir de plus en plus claire au fur et à mesure que vous allez avancer dans ce cours. De manière générale, je vous conseille de faire régulièrement des allers retours dans le cours pour retourner sur d’anciennes notions qui n’étaient pas claires pour vous à l’époque et essayer de les comprendre avec vos nouvelles connaissances.
Les structures de langage echo et print
Les structures de langage echo
et print
vont nous permettre d’afficher un résultat en PHP.
Pour cela, nous allons écrire notre echo
ou notre print
suivi de ce qu’on souhaite afficher et suivi d’un point-virgule pour terminer l’instruction, en plaçant le tout dans une balise PHP.
Regardez plutôt l’exemple suivant qu’on va immédiatement expliquer :
<!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> </head> <body> <h1>Titre principal</h1> <h1>Titre principal</h1> <?php echo "<h2>Première instruction PHP avec echo</h2>"; echo 'Bonjour à tous !<br>'; echo 29; echo "<br>J'ai ", 29, " ans.<br>"; print "<h2>Première instruction PHP avec print</h2>"; print 'Bonjour à tous !<br>'; print 29; ?> <p>Un paragraphe</p> </body> </html>
Nous pouvons noter plusieurs choses à partir de l’exemple précédent. Déjà, vous pouvez observer qu’on peut tout à fait passer des balises HTML dans ce qu’on souhaite afficher. Ces balises HTML seront lues comme les autres par le navigateur.
Ensuite, vous pouvez remarquer que j’utilise parfois des apostrophes droites, parfois des guillemets droits et d’autres fois rien du tout pour entourer le contenu qui devra être affiché.
Ici, vous pouvez retenir que les chaines de caractères (c’est-à-dire les contenus de type texte) doivent toujours être entourés d’un couple d’apostrophes ou de guillemets pour pouvoir être affichées. Cela n’est pas nécessaire pour afficher un chiffre. Nous reparlerons des types de données plus tard dans ce cours.
Notez que les structures de langage echo
et print
ne sont pas strictement équivalentes mais qu’il existe quelques différences mineures entre elles.
La première de ces différences est que echo
ne possède pas de valeur de retour à la différence de print
qui va toujours retourner 1
. Nous reparlerons des valeurs de retour dans une prochaine leçon : il est beaucoup trop tôt pour le moment.
La deuxième différence est qu’on va pouvoir passer plusieurs valeurs à echo
tandis qu’on ne va pouvoir en passer qu’une à print
. En pratique, cependant, il sera très rare de passer plusieurs paramètres à echo
tout simplement car cela n’aura bien souvent aucune utilité.
Si vous regardez bien le dernier exemple utilisant echo
, vous pouvez remarquer qu’on passe plusieurs valeurs entre différents couples de guillemets et séparées par des virgules.
Enfin, le dernier point de différence entre echo
et print
est que echo
s’exécute un peu plus rapidement que print
.
En pratique, nous utiliserons majoritairement echo
pour afficher un résultat en PHP.
Notez finalement qu’une autre syntaxe avec un couple de parenthèses existe pour echo
et print
:
Je vais vous demander de ne pas vous préoccuper de cette syntaxe pour le moment et d’utiliser comme moi la syntaxe sans les parenthèses.
Jusqu’ici, vous pouvez vous dire que echo
et print
ne sont pas très utiles si elles ne servent qu’à afficher du texte qu’on écrit et qu’on pourrait aussi bien directement écrire nos contenus en HTML.
C’est tout à fait vrai : pour le moment, nous faisons un usage très basique de ces structures de langage et pourrions aussi bien écrire directement en HTML. Cependant, echo
et print
vont nous être très utiles par la suite lorsqu’on devra afficher le contenu de variables.
Nous débutons à peine, il est donc tout à fait normal que nous ne puissions pas encore faire d’utilisation très avancée des éléments du langage que nous étudions mais je vous demande ici de me faire confiance et de faire l’effort de bien comprendre ces premiers concepts qui vont nous servir dans tout le reste du cours.
L’usage des apostrophes et des guillemets pour afficher des chaines de caractères
Pour afficher une chaine de caractère, c’est-à-dire un texte avec echo
ou print
, vous devez absolument l’entourer d’un couple d’apostrophes droites ou de guillemets droits.
Une nouvelle fois, les écritures avec les apostrophes et avec les guillemets ne sont pas strictement équivalentes mais vont pouvoir être utilisées dans des situations différentes et pour répondre à des problèmes différents.
Nous verrons précisément quand utiliser des guillemets et quand utiliser des apostrophes après avoir étudié les variables en PHP car il est nécessaire de les connaître pour bien cerner et comprendre les différents cas d’utilisation.
Pour l’instant, nous allons nous intéresser à une autre problématique que nous allons rencontrer lorsqu’un souhaitera afficher une chaine de caractères : que faire si la chaine de caractères qu’on souhaite afficher contient elle-même des apostrophes et / ou des guillemets ? Comment le PHP peut-il faire pour savoir qu’ils appartiennent à notre texte et qu’ils ne servent pas à le délimiter ?
La réponse est simple : il ne peut pas le savoir. Pour cela, nous allons devoir l’aider en « échappant » nos apostrophes ou nos guillemets (selon ce qui a été choisi pour entourer notre chaine de caractères), c’est-à-dire en neutralisant leur signification spéciale en PHP.
Pour faire cela, nous allons simplement devoir utiliser un antislash \
avant chaque caractère qu’on souhaite échapper pour neutraliser sa signification spéciale. L’antislash est en PHP un caractère d’échappement : il sert à indiquer au serveur qu’il ne doit pas tenir compte de la signification spéciale du caractère qui le suit dans le cas où ce caractère est un caractère spécial (c’est-à-dire un caractère qui possède une signification spéciale pour le PHP).
Illustrons immédiatement cela avec un exemple concret :
<!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> </head> <h1>Titre principal</h1> <?php echo 'Je m\'appelle Florian mais tout le monde m\'appelle "Flo"<br>'; echo "Je m'appelle Florian mais tout le monde m'appelle \"Flo\"<br>"; print 'Je m\'appelle Florian mais tout le monde m\'appelle "Flo"<br>'; print "Je m'appelle Florian mais tout le monde m'appelle \"Flo\"<br>"; ?> <p>Un paragraphe</p> </body> </html>
Dans cet exemple, notre script contient 4 instructions différentes utilisant echo
et print
.
Dans notre première instruction, on utilise des apostrophes pour délimiter notre chaine de caractères à afficher. Toutes les apostrophes à l’intérieur de la chaine de caractères devront donc être échappés à l’aide d’un antislash afin d’éviter toute ambiguïté. Ici, pas besoin d’échapper les guillemets puisque le PHP sait qu’on utilise des apostrophes pour délimiter notre chaine de caractères. Il n’y a donc pas d’ambiguïté sur les guillemets.
Dans notre deuxième instruction, on utilise au contraire des guillemets pour entourer la chaine de caractères qu’on souhaite afficher. Il faudra donc ici échapper tous les guillemets présents au sein de notre chaine de caractères.
On réutilise les mêmes expressions pour nos troisième et quatrième instructions mais en utilisant cette fois-ci print
plutôt qu’echo
.