PHP 8.3.4 Released!

echo

(PHP 4, PHP 5, PHP 7, PHP 8)

echoAffiche une chaîne de caractères

Description

echo(string ...$expressions): void

Affiche 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és par des virgules, et non délimités par des parenthèses. Contrairement à d'autres constructions du langage, echo n'a pas de valeur de retour, elle ne peut donc pas être utilisée 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érence avec print est que echo accepte plusieurs arguments et ne retourne aucune valeur.

Liste de paramètres

expressions

Une ou plusieurs expressions de chaînes de caractères à afficher, séparées par des virgules. Les valeurs qui ne sont pas des chaînes de caractères seront converties en chaînes de caractères, même si la directive strict_types est activée.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec echo

<?php
echo "echo ne requiert pas de parenthèses.";

// Les chaînes peuvent être passées soit individuellement comme plusieurs arguments ou
// concaténées ensemble et passées 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 n'est ajoutée ; 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 converties en chaînes, 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.
// Donc il peut être utilisé dans ce contexte.

echo $some_var ? 'true': 'false'; // évaluant l'expression d'abord puis la passant à echo
?>

Notes

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 de echo 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
?>

Astuce

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. Par exemple, l'opérateur de concatenation a une précédence supérieure à l'opérateur ternaire, et antérieurement à 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 requises pour augmenter la précédence, car chaque expression est séparé :

<?php
echo "Hello ", isset($name) ? $name : "John Doe", "!";

echo
"Sum: ", 1 + 2;

Voir aussi

add a note

User Contributed Notes 3 notes

up
34
pemapmodder1970 at gmail dot com
6 years ago
Passing multiple parameters to echo using commas (',')is not exactly identical to using the concatenation operator ('.'). There are two notable differences.

First, concatenation operators have much higher precedence. Referring to http://php.net/operators.precedence, there are many operators with lower precedence than concatenation, so it is a good idea to use the multi-argument form instead of passing concatenated strings.

<?php
echo "The sum is " . 1 | 2; // output: "2". Parentheses needed.
echo "The sum is ", 1 | 2; // output: "The sum is 3". Fine.
?>

Second, a slightly confusing phenomenon is that unlike passing arguments to functions, the values are evaluated one by one.

<?php
function f($arg){
var_dump($arg);
return
$arg;
}
echo
"Foo" . f("bar") . "Foo";
echo
"\n\n";
echo
"Foo", f("bar"), "Foo";
?>

The output would be:
string(3) "bar"FoobarFoo

Foostring(3) "bar"
barFoo

It would become a confusing bug for a script that uses blocking functions like sleep() as parameters:

<?php
while(true){
echo
"Loop start!\n", sleep(1);
}
?>

vs

<?php
while(true){
echo
"Loop started!\n" . sleep(1);
}
?>

With ',' the cursor stops at the beginning every newline, while with '.' the cursor stops after the 0 in the beginning every line (because sleep() returns 0).
up
-7
t3tesla at gmail dot com
2 years ago
We can use the 'echo' shortcut syntax with the conditional operator (expr1) ? (expr2) : (expr3)

<?php
$some_var
= 10;
?>
Back to html :
<p class="<?=$some_var>5 ? "class1" : "class2"?>">Some text.</p>

Will give : <p class="class1">Some text.</p>

<?php
$some_var
= 4;
?>
<p class="<?=$some_var>5 ? "class1" : "class2"?>">Some text.</p>

Will give : <p class="class2">Some text.</p>
up
-10
retrobytespr at mail dot com
2 years ago
If you have a large block of text, say your blog or something includes code examples, you may use the <<< operator (?) to define the start and end of your block to be echoed out. For instance:

<?php
echo <<< JAVASCRIPT

function convertTroyOuncesToGrams(troyOunce) {
return troyOunce / 31.1034768;
}

JAVASCRIPT; # End of block

?>

You may also embed PHP strings and other simple scalars into your blocks of text, for example:

<?php
$troyOunceAsGrams
= 31.1034768;

echo <<< JAVASCRIPT

function convertTroyOuncesToGrams(troyOunce) {
return troyOunce /
{$troyOunceAsGrams};
}

JAVASCRIPT;
To Top