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 6 * 7; // 42

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

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

?>

Пример #2 Конструкция echo не относится к выражениям

<?php

// Следующий код недопустим, поскольку языковая конструкция echo не ведёт себя как выражение:
($some_var) ? echo 'true' : echo 'false';

?>

Примечания

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

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

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

Пример #3 Аргументы в круглых скобках

<?php

echo "привет", PHP_EOL;;
// Выведет «привет»

echo("привет"), PHP_EOL;;
// Тоже выведет "привет", потому что ("привет") — корректное выражение

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

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

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

?>

Пример #4 Недопустимое выражение

<?php

echo("hello", " world"), PHP_EOL;
// Конструкция выбросит ошибку синтаксического анализа Parse Error,
// потому что ("привет", "мир") — некорректное выражение

?>

Подсказка

Передача набора аргументов в конструкция 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 'Сумма: ' . 1 + 2;

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

?>

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

<?php

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

echo
"Сумма: ", 1 + 2;

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