Выводит строки

# echo

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

echo — Выводит строки

### Описание

function 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;

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

- print - Выводит строку
- printf() - Выводит отформатированную строку
- flush() - Сбрасывает системный буфер вывода
- Способы работы со строками

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open