1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-23 23:32:16 +01:00
Files
archived-doc-ru/language/basic-syntax.xml
2025-04-25 19:49:53 +03:00

300 lines
14 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: 0e618211e53c66f33762be225a4d57c08ef4b2f7 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="language.basic-syntax" xmlns="http://docbook.org/ns/docbook" annotations="interactive">
<title>Основы синтаксиса</title>
<sect1 xml:id="language.basic-syntax.phptags">
<title>PHP-теги</title>
<para>
При разборе файла PHP-интерпретатор распознаёт открывающие и закрывающие теги
<literal>&lt;?php</literal> и <literal>?&gt;</literal>,
чтобы определить границы выполнения PHP-кода.
PHP-парсер игнорирует содержимое за пределами этих тегов, что разрешает
бесшовно встраивать PHP-код в документы одного или другого типа.
</para>
<para>
За тегом <literal>&lt;?php</literal> обязательно указывают
пробельный символ наподобие пробела, символа табуляции или новой строки,
чтобы правильно разделить токены.
Без пробельного символа возникнет синтаксическая ошибка.
</para>
<para>
PHP также включает короткий echo-тег <literal>&lt;?=</literal>
сокращение более многословного синтаксиса <code>&lt;?php echo</code>.
</para>
<para>
<example>
<title>Открывающие и закрывающие теги PHP</title>
<programlisting role="php">
<![CDATA[
1. <?php echo 'Для PHP-кода в XHTML- или XML-документах
указывают эти теги'; ?>
2. Короткий echo-тег указывают, когда требуется <?= 'вывести эту строку' ?>.
Короткий синтаксис эквивалентен синтаксису
<?php echo 'вывести эту строку' ?>.
3. <? echo 'этот код разместили внутри коротких тегов, но он будет работать, только если '.
'включили опцию short_open_tag'; ?>
]]>
</programlisting>
</example>
</para>
<para>
Короткие теги третьего примера доступны по умолчанию, но отключаются
либо через директиву <link linkend="ini.short-open-tag">short_open_tag</link>
в файле PHP-конфигурации &php.ini;, либо при сборке PHP
с опцией <option>--disable-short-tags</option>.
</para>
<para>
<note>
<para>
Лучше указывать только стандартные
теги <code>&lt;?php ?&gt;</code> и <code>&lt;?= ?&gt;</code>,
поскольку при отключении коротких тегов код станет несовместимым.
</para>
</note>
</para>
<para>
Лучше не закрывать PHP-тегом блок PHP-кода, который стоит в конце файла.
Это предотвращает случайное добавление пробелов или переводов
строк после закрывающего PHP-тега, которые иногда становятся причиной нежелательных
эффектов, поскольку PHP начнёт буферизацию вывода, если программист не намерен
отправлять вывод в этой точке скрипта.
</para>
<para>
<example>
<title>Файл только с PHP-кодом</title>
<programlisting role="php">
<![CDATA[
<?php
echo "Привет, мир!\n";
// …ещё код
echo "Последняя инструкция\n";
// Скрипт заканчивается в этом месте без PHP-тега, которым закрывается блок кода
]]>
</programlisting>
</example>
</para>
</sect1>
<sect1 xml:id="language.basic-syntax.phpmode">
<title>Выход из режима HTML-разметки</title>
<para>
PHP-интерпретатор игнорирует всё, что разместили вне пары открывающего и закрывающего тегов,
что разрешает добавлять в файлы смешанное содержимое. Это разрешает встраивать PHP-код
в HTML-документы, чтобы, например, создавать шаблоны.
</para>
<para>
<example>
<title>PHP-код, который встроили в HTML-разметку</title>
<programlisting role="php">
<![CDATA[
<p>PHP-интерпретатор проигнорирует разбор PHP-кода в этом параграфе, а текст отобразится в браузере.</p>
<?php echo 'А эту строку файла — разберёт.'; ?>
<p>Этот параграф PHP тоже не станет анализировать как PHP-код и отправит в браузер.</p>
]]>
</programlisting>
</example>
</para>
<para>
Это работает предсказуемо, поскольку когда PHP-интерпретатор встречает закрывающие теги ?&gt;,
он просто начинает выводить всё, что находит, — за исключением перевода строки, который
идёт сразу за закрывающим тегом, как описывает раздел
«<link linkend="language.basic-syntax.instruction-separation">Разделение инструкций</link>», —
пока не встретит другой открывающий тег, если только закрывающий тег не встретился
в середине условной инструкции, тогда интерпретатор определяет результат
условия, прежде чем решить, что пропустить.
Следующий пример показывает это поведение.
</para>
<para>
Структуры с условиями.
<example>
<title>Продвинутый выход из режима HTML-разметки с условиями</title>
<programlisting role="php">
<![CDATA[
<?php if ($expression == true): ?>
Это отобразится, если выражение истинно.
<?php else: ?>
Иначе отобразится это.
<?php endif; ?>
]]>
</programlisting>
</example>
В этом примере PHP пропустит блок, для которого условие не выполняется,
даже если блок указали за пределами открывающего и закрывающего тегов;
PHP пропустит блоки по условию, поскольку PHP-интерпретатор пропустит блоки
внутри условия, которое не выполняется.
</para>
<para>
Для вывода больших блоков текста выход из режима разбора PHP-кода
часто эффективнее отправки текста конструкциями
<function>echo</function> или <function>print</function>.
</para>
<para>
<note>
<para>
В XML- или XHTML-документы PHP-код встраивают внутри тегов <code>&lt;?php ?&gt;</code>,
чтобы документы соответствовали стандартам.
</para>
</note>
</para>
</sect1>
<sect1 xml:id="language.basic-syntax.instruction-separation">
<title>Разделение инструкций</title>
<para>
Как и в языках программирования C или Perl, в языке PHP обязательно заканчивать инструкции
символом точки с запятой, который указывают в конце каждой инструкции. Закрывающий тег блока PHP-кода
автоматически применяет точку с запятой, поэтому не обязательно ставить точку с запятой в конце последней
строки блока с PHP-кодом. PHP не включает в вывод перевод строки, который идёт сразу за закрывающим тегом.
</para>
<para>
<example>
<title>Пример вывода текста между закрывающим тегом и переводом строки</title>
<programlisting role="php">
<![CDATA[
<?php echo "Какой-то текст"; ?>
Нет новой строки
<?= "А сейчас, новая строка" ?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Какой-то текстНет новой строки
А сейчас, новая строка
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Примеры входа в режим PHP-парсера и выхода из него</title>
<programlisting role="php">
<![CDATA[
<?php
echo "Это тест\n";
?>
<?php echo "Это тест\n" ?>
<?php echo "Не закрываем блок кода в конце файла PHP-тегом\n";
]]>
</programlisting>
</example>
</para>
<para>
<note>
<para>
Тег, которым закрывается блок PHP-кода в конце файла, необязателен,
а при подключении файлов выражением <function>include</function>
или <function>require</function> пропуск тега иногда приносит пользу,
чтобы нежелательные пробелы не появлялись в конце файлов и не мешали позже
добавлять к ответу сервера дополнительные HTTP-заголовки. При буферизации вывода
пропуск тега также помогает исключить нежелательные пробелы в конце частей,
которые сгенерировали подключаемые файлы.
</para>
</note>
</para>
</sect1>
<sect1 xml:id="language.basic-syntax.comments">
<title>Комментарии</title>
<para>
PHP поддерживает комментарии в стиле языков программирования C, C++
и в стиле командной оболочки Unix-систем, которая унаследовала стиль комментариев из языка Perl. Например:
</para>
<para>
<example>
<title>Пример комментариев</title>
<programlisting role="php">
<![CDATA[
<?php
echo "Это тест"; // Это однострочный комментарий в стиле языка C++
/* Это многострочный комментарий
ещё одна строка комментария */
echo "Это ещё один тест\n";
echo "Ещё один последний тест\n"; # Это комментарий в стиле Unix-оболочки
?>
]]>
</programlisting>
</example>
</para>
<simpara>
Однострочные комментарии распространяются только до конца строки PHP-кода
или на текущий блок PHP-кода в HTML-строке, в зависимости от того, что идёт первым.
Поэтому HTML-код после начала однострочного комментария <literal>// ... ?&gt;</literal>
или <literal># ... ?&gt;</literal> выводится: тег ?&gt; прерывает
режим разбора PHP-кода и возвращает режим HTML-разметки, и символы <literal>//</literal>
или <literal>#</literal> не влияют на это.
</simpara>
<para>
<example>
<title>Пример однострочных комментариев</title>
<programlisting role="php">
<![CDATA[
<h1>Это <?php # echo "простой";?> пример</h1>
<p>Заголовок вверху выведет 'Это пример'.</p>
]]>
</programlisting>
</example>
</para>
<simpara>
Комментарии в стиле языка C заканчиваются, когда обнаруживается первая последовательность
<literal>*/</literal>. Программисты следят за тем, чтобы комментарии
в стиле языка C не оказались вложенными. Ошибку с вложенными C-комментариями часто допускают,
когда комментируют большой блок кода.
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
/*
echo "Это тест"; /* Этот комментарий вызовет ошибку */
*/
?>
]]>
</programlisting>
</informalexample>
</para>
</sect1>
</chapter>
<!-- 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
-->