PHP 7.4.24 Released!

echo

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

echoВыводит одну или более строк

Описание

echo(string ...$expressions): void

Выводит одно или несколько выражений без дополнительных символов новой строки или пробелов.

На самом деле, echo - это не функция, а языковая конструкция. Её аргументы - это список выражений, следующих за ключевым словом echo, разделённых запятыми и не ограниченных круглыми скобками. В отличие от некоторых других языковых конструкций, echo не имеет никакого возвращаемого значения, поэтому её нельзя использовать в контексте выражения.

echo имеет также краткую форму, представляющую собой знак равенства, следующий непосредственно за открывающим тегом. Этот сокращённый синтаксис работает даже с отключённым параметром конфигурации short_open_tag.

У меня есть <?=$foo?> foo.

Единственное отличие от print в том, что echo принимает несколько аргументов и не имеет возвращаемого значения.

Список параметров

expressions

Одно или несколько строковых выражений для вывода, разделённых запятыми. Нестроковые значения будут преобразованы в строки, даже если включена директива strict_types.

Возвращаемые значения

Функция не возвращает значения после выполнения.

Примеры

Пример #1 Примеры использования echo

<?php
echo "echo не требует скобок.";

// Строки можно передавать по отдельности как несколько аргументов или
// объединять вместе и передавать как один аргумент.
echo 'Эта ''строка ''сформирована ''из ''нескольких параметров.'"\n";
echo 
'Эта ' 'строка ' 'сформирована ' 'с ' 'помощью конкатенации.' "\n";

// Новая строка или пробел не добавляются; пример ниже выведет "приветмир" в одну строку
echo "привет";
echo 
"мир";

// То же, что и выше
echo "привет""мир";

echo 
"Эта строка занимает
несколько строк. Новые строки также
будут выведены"
;

echo 
"Эта строка занимает\nнесколько строк. Новые строки также\nбудут выведены.";

// Аргументом может быть любое выражение, производящее строку
$foo "пример";
echo 
"пример - это $foo"// пример - это пример

$fruits = ["лимон""апельсин""банан"];
echo 
implode(" и "$fruits); // лимон и апельсин и банан

// Нестроковые выражения приводятся к строковым, даже если используется declare(strict_types=1)
echo 7// 42

// Поскольку echo не работает как выражение, следующий код некорректен.
($some_var) ? echo 'true' : echo 'false';

// Однако следующие примеры будут работать:
($some_var) ? print 'true' : print 'false'// print также является конструкцией, но
                                            // это допустимое выражение, возвращающее 1,
                                            // поэтому его можно использовать в этом контексте..

echo $some_var 'true''false'// сначала выполняется выражение, результат которого передаётся в echo
?>

Примечания

Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.

Замечание: Использование с круглыми скобками

Заключение одного аргумента в echo в круглые скобки не вызовет синтаксической ошибки и создаст синтаксис, который выглядит как обычный вызов функции. Однако это может ввести в заблуждение, потому что круглые скобки на самом деле являются частью выводимого выражения, а не частью самого синтаксиса echo.

<?php
echo "привет";
// выведет "привет"

echo("привет");
// также выведет "привет", потому чтл ("привет") является корректным выражением

echo(2) * 3;
// выведет "9"; круглые скобки приводят к тому, что сначала вычисляется 1+2, а затем 3*3
// оператор echo видит всё выражение как один аргумент

echo "привет"" мир";
// выведет "привет мир"

echo("привет"), (" мир");
// выведет "привет мир"; круглые скобки являются частью каждого выражения

echo("привет"" мир");
// Выбросит ошибку синтаксического анализа, потому что ("привет", "мир") не является корректным выражением.
?>

Подсказка

Передача нескольких аргументов в echo может избежать осложнений, связанных с приоритетом оператора конкатенации в PHP. Например, оператор конкатенации имеет более высокий приоритет, чем тернарный оператор, а до PHP 8.0.0 имел тот же приоритет, что и сложение и вычитание:

<?php
// Ниже выражение 'Привет, ' . isset($name) вычисляется первым
// и всегда имеет значение true, поэтому аргумент для echo всегда равен $name
echo 'Привет, ' . isset($name) ? $name 'Джон Доу' '!';

// Предполагаемое поведение требует дополнительных скобок
echo 'Привет, ' . (isset($name) ? $name 'Джон Доу') . '!';

// В PHP до 8.0.0 ниже выведется "2", а не "Сумма: 3".
echo 'Сумма: ' 2;

// Опять же, добавление круглых скобок обеспечивает предполагаемый порядок выполнения.
echo 'Сумма: ' . (2);

Если передано несколько аргументов, скобки не требуются для обеспечения приоритета, потому что каждое выражение является отдельным:

<?php
echo "Привет, ", isset($name) ? $name "Джон Доу""!";

echo 
"Сумма: "2;

Смотрите также

add a note add a note

User Contributed Notes 3 notes

up
30
pemapmodder1970 at gmail dot com
4 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
1
t3tesla at gmail dot com
2 months 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
-6
mparsa1372 at gmail dot com
6 months ago
The following example shows how to output text with the echo command (notice that the text can contain HTML markup):

<?php
echo "<h2>PHP is Fun!</h2>";
echo
"Hello world!<br>";
echo
"I'm about to learn PHP!<br>";
echo
"This ", "string ", "was ", "made ", "with multiple parameters.";
?>
To Top