(PHP 4, PHP 5, PHP 7, PHP 8)
echo — Affiche une chaîne de caractères
...$expressions
): voidAffiche une ou plusieurs expressions, sans espaces ou nouvelle ligne additionnelle.
echo
n'est pas une fonction mais une construction du langage.
Ses arguments sont une liste d'expressions suivant le mot clé echo
,
séparé par des virgules, et non délimité par des parenthèses.
Contrairement à d'autres construction du langages, echo
n'a pas de valeur de retour, elle ne peut donc pas être utilisé dans
le contexte d'une expression.
echo
dispose aussi d'une syntaxe courte,
où vous pouvez faire suivre immédiatement la balise PHP ouvrante d'un
signe égal (=
).
Cette syntaxe est disponible même si la directive de configuration
short_open_tag
est désactivée.
J'ai <?=$foo?> foo.
La plus grosse différente avec print est que
echo
accepte plusieurs arguments et ne retourne
aucune valeur.
expressions
Une ou plusieurs expressions de chaînes de caractères à afficher,
séparé par des virgules.
Les valeurs qui ne sont pas des chaînes de caractères seront convertie
en chaîne de caractère, même si la directive
strict_types
est activée.
Aucune valeur n'est retournée.
Exemple #1 Exemple avec echo
<?php
echo "echo ne requit pas de parenthèses.";
// Les chaînes peuvent être passé soit individuellement comme plusieurs arguments ou
// concaténé ensemble et passé en tant qu'un seul argument
echo 'This ', 'string ', 'was ', 'made ', 'with multiple parameters.', "\n";
echo 'This ' . 'string ' . 'was ' . 'made ' . 'with concatenation.' . "\n";
// Aucune nouvelle ligne ou espace est ajouté ; ci-dessous affiche "helloworld" tout sur une ligne
echo "hello";
echo "world";
// Pareil que ci-dessus
echo "hello", "world";
echo "This string spans
multiple lines. The newlines will be
output as well";
echo "This string spans\nmultiple lines. The newlines will be\noutput as well.";
// L'argument peut être n'importe quelle expression qui produit une chaîne de caractères
$foo = "example";
echo "foo is $foo"; // foo is example
$fruits = ["lemon", "orange", "banana"];
echo implode(" and ", $fruits); // lemon and orange and banana
// Les expressions qui ne sont pas des chaînes sont convertie en chaîne, même si declare(strict_types=1) est utilisé
echo 6 * 7; // 42
// Comme echo ne se comporte pas comme une expression, le code suivant est invalide.
($some_var) ? echo 'true' : echo 'false';
// Cependent, les exemples suivants fonctionneront :
($some_var) ? print 'true' : print 'false'; // print est aussi une construction, mais
// est une expression valide, retournant 1.
// Dont il peut être utilisé dans ce contexte.
echo $some_var ? 'true': 'false'; // évaluant l'expression d'abord puis la passant à echo
?>
Note: Comme ceci est une structure du langage, et non pas une fonction, il n'est pas possible de l'appeler avec les fonctions variables ou arguments nommés.
Note: Utilisation avec les parenthèses
Entourer un seul argument de
echo
avec des parenthèses ne lèvera pas une erreur de syntaxe, et produit une syntaxe ressemblant à un appel normal de fonction. Néanmoins, ceci peut être trompeur, car les parenthèses font en réalité partie de l'expression qui est en cours d'affichage, et non partie de la syntaxe deecho
en lui-même.
<?php
echo "hello";
// outputs "hello"
echo("hello");
// also outputs "hello", because ("hello") is a valid expression
echo(1 + 2) * 3;
// outputs "9"; the parentheses cause 1+2 to be evaluated first, then 3*3
// the echo statement sees the whole expression as one argument
echo "hello", " world";
// outputs "hello world"
echo("hello"), (" world");
// outputs "hello world"; the parentheses are part of each expression
echo("hello", " world");
// Throws a Parse Error because ("hello", " world") is not a valid expression
?>
Passer plusieurs arguments à echo
permet d'éviter des
complications qui apparaissent à cause de la précédence de l'opération de
concaténation en PHP. Pour instance, l'opérateur de concatenation à une
précédence supérieur à l'opérateur ternaire, et antérieur à PHP 8.0.0,
avait la même précédence que l'addition et la soustraction :
<?php
// Below, the expression 'Hello ' . isset($name) is evaluated first,
// and is always true, so the argument to echo is always $name
echo 'Hello ' . isset($name) ? $name : 'John Doe' . '!';
// The intended behaviour requires additional parentheses
echo 'Hello ' . (isset($name) ? $name : 'John Doe') . '!';
// In PHP prior to 8.0.0, the below outputs "2", rather than "Sum: 3"
echo 'Sum: ' . 1 + 2;
// Again, adding parentheses ensures the intended order of evaluation
echo 'Sum: ' . (1 + 2);
Si plusieurs arguments sont fournis, alors les parenthèses ne seront pas requis pour enforcer la précédence, car chaque expression est séparé :
<?php
echo "Hello ", isset($name) ? $name : "John Doe", "!";
echo "Sum: ", 1 + 2;