mirror of
https://github.com/php/doc-ru.git
synced 2026-03-26 00:32:15 +01:00
244 lines
10 KiB
XML
244 lines
10 KiB
XML
<?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;
|
||
¬e.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
|
||
-->
|