mirror of
https://github.com/php/doc-ru.git
synced 2026-03-24 07:42:22 +01:00
* 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
274 lines
11 KiB
XML
274 lines
11 KiB
XML
<?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;
|
||
¬e.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
|
||
-->
|