1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-26 00:32:15 +01:00
Files
archived-doc-ru/reference/strings/functions/echo.xml
2024-01-17 09:31:01 +03:00

244 lines
10 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 7a3899eea90f3df8dcfe8fd350900162f3490bed Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://docbook.org/ns/docbook" xml:id="function.echo">
<refnamediv>
<refname>echo</refname>
<refpurpose>Выводит строки</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>void</type><methodname>echo</methodname>
<methodparam rep="repeat"><type>string</type><parameter>expressions</parameter></methodparam>
</methodsynopsis>
<simpara>
Выводит одно или несколько выражений без дополнительных символов новой строки или пробелов.
</simpara>
<para>
Придерживаясь строгой терминологии, <literal>echo</literal> — это не функция, а языковая конструкция.
Её аргументы — это список выражений, следующих за ключевым словом <literal>echo</literal>,
разделённых запятыми и не ограниченных круглыми скобками.
Языковая конструкция <literal>echo</literal>, в отличие от других языковых конструкций,
не возвращает никаких значений, поэтому её нельзя использовать в контексте выражения.
</para>
<para>
У конструкции <literal>echo</literal> есть также краткий синтаксис,
где можно сразу после открывающего тега поставить знак равенства.
Сокращённый синтаксис работает даже с отключённым параметром
конфигурации <link linkend="ini.short-open-tag">short_open_tag</link>.
<informalexample>
<programlisting role="php">
<![CDATA[
У меня есть <?=$foo?> foo.
]]>
</programlisting>
</informalexample>
</para>
<para>
Основные отличия от конструкции <function>print</function> состоят в том, что конструкция <literal>echo</literal>
умеет принимать много аргументов и не возвращает значение.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>expressions</parameter></term>
<listitem>
<para>
Одно или несколько строковых выражений для вывода, разделённых запятыми.
Нестроковые значения будут преобразованы в строки, даже если
<link linkend="language.types.declarations.strict">включена директива <literal>strict_types</literal></link>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.void;
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Примеры использования языковой конструкции <literal>echo</literal></title>
<programlisting role="php">
<![CDATA[
<?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
// Поскольку echo не работает как выражение, следующий код некорректен.
($some_var) ? echo 'true' : echo 'false';
// Однако следующие примеры будут работать:
($some_var) ? print 'true' : print 'false'; // print — тоже конструкция,
// но это допустимое выражение, возвращающее 1,
// поэтому его можно использовать в этом контексте.
echo $some_var ? 'true': 'false'; // сначала выполняется выражение, результат которого передаётся в echo
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
&note.language-construct;
<note>
<title>Использование с круглыми скобками</title>
<para>
Заключение одного аргумента для конструкции <literal>echo</literal> в круглые скобки не вызовет
синтаксической ошибки и создаст синтаксис, который выглядит как обычный
вызов функции. Однако это может ввести в заблуждение, потому что круглые скобки
интерпретируются как часть выводимого выражения, а не часть самого
синтаксиса <literal>echo</literal>.
</para>
<para>
<example>
<title/>
<programlisting role="php">
<![CDATA[
<?php
echo "привет";
// выведет «привет»
echo("привет");
// также выведет «привет», потому что ("привет") — корректное выражение
echo(1 + 2) * 3;
// выведет «9»; круглые скобки приводят к тому, что сначала вычисляется 1 + 2, а затем 3 * 3
// оператор echo видит всё выражение как один аргумент
echo "привет", " мир";
// выведет «привет мир»
echo("привет"), (" мир");
// выведет «привет мир»; круглые скобки являются частью каждого выражения
echo("привет", " мир");
// Выбросит ошибку синтаксического анализа, потому что ("привет", "мир") — некорректное выражение.
?>
]]>
</programlisting>
</example>
</para>
</note>
<tip>
<para>
Передача нескольких аргументов в <literal>echo</literal> помогает
избегать осложнений, связанных с приоритетом оператора конкатенации
в PHP. Например, у оператора конкатенации более высокий приоритет, чем
у тернарного оператора, а до PHP 8.0.0 у него был тот же приоритет, что и у сложения с вычитанием:
</para>
<programlisting role="php">
<![CDATA[
<?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);
]]>
</programlisting>
<para>
Если передано несколько аргументов, то скобки не нужны для принудительной установки приоритета,
потому что каждое выражение отдельно:
</para>
<programlisting role="php">
<![CDATA[
<?php
echo "Привет, ", isset($name) ? $name : "Джон Доу", "!";
echo "Сумма: ", 1 + 2;
]]>
</programlisting>
</tip>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>print</function></member>
<member><function>printf</function></member>
<member><function>flush</function></member>
<member><link linkend="language.types.string">Способы работы со строками</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->