1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
Mikhail Alferov c394cf8502 Update 45042fe to En (#1085)
* Update book.xml to en

* Update addcslashes.xml to en

* Update addslashes.xml to en

* Update sprintf.xml to en

* Update chr.xml to en

* Update chunk-split.xml to en

* Update echo.xml to en

* Update explode.xml to en

* Update fprintf.xml to en

* Update html-entity-decode.xml to en

* Update lcfirst.xml to en

* Update md5-file.xml to en

* Update number-format.xml to en

* Update ord.xml to en

* Update echo.xml

* Update print.xml to en

* Update setlocale.xml to en

* Update sha1-file.xml to en

* Update soundex.xml to en

* Update str-getcsv.xml to en

* Update str-pad.xml to en

* Update str-replace.xml to en

* Update stripos.xml to en

* Update stristr.xml to en

* Update strlen.xml to en

* Update strnatcmp.xml to en

* Update strpbrk.xml to en

* Update strpos.xml to en

* Update strrpos.xml to en

* Update strstr.xml to en

* Update strtok.xml toen

* Update strtr.xml to en

* Update substr-compare.xml to en

* Update substr-count.xml to en

* Update substr.xml to en

* Update ucfirst.xml to en

* Update ucwords.xml to en

* Update vfprintf.xml to en
2025-07-04 19:30:56 +03:00

274 lines
11 KiB
XML
Raw Permalink 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: 45042fef652f1b4e904e809fcbfcf31f6c60670b 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
// Однако следующие примеры работают:
($some_var) ? print 'true' : print 'false'; // print — тоже конструкция,
// но это допустимое выражение, которое возвращает 1,
// поэтому конструкция print допустима в этом контексте.
echo $some_var ? 'true': 'false'; // Сначала выполняется выражение, а результат передаётся в конструкцию echo
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Конструкция <literal>echo</literal> не относится к выражениям</title>
<programlisting role="php" annotations="non-interactive">
<![CDATA[
<?php
// Следующий код недопустим, поскольку языковая конструкция echo не ведёт себя как выражение:
($some_var) ? echo 'true' : echo 'false';
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
&note.language-construct;
<note>
<title>Использование с круглыми скобками</title>
<para>
Заключение одного аргумента для конструкции <literal>echo</literal> в круглые скобки не вызовет
синтаксической ошибки и создаст синтаксис, который выглядит как обычный
вызов функции. Однако это может ввести в заблуждение, потому что круглые скобки
интерпретируются как часть выводимого выражения, а не часть самого
синтаксиса <literal>echo</literal>.
<example>
<title>Аргументы в круглых скобках</title>
<programlisting role="php">
<![CDATA[
<?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;
// Выведет "привет мир"; круглые скобки — часть каждого выражения
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Недопустимое выражение</title>
<programlisting role="php" annotations="non-interactive">
<![CDATA[
<?php
echo("hello", " world"), PHP_EOL;
// Конструкция выбросит ошибку синтаксического анализа Parse Error,
// потому что ("привет", "мир") — некорректное выражение
?>
]]>
</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
-->