mirror of
https://github.com/php/doc-ru.git
synced 2026-03-23 23:32:16 +01:00
300 lines
14 KiB
XML
300 lines
14 KiB
XML
<?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><?php</literal> и <literal>?></literal>,
|
||
чтобы определить границы выполнения PHP-кода.
|
||
PHP-парсер игнорирует содержимое за пределами этих тегов, что разрешает
|
||
бесшовно встраивать PHP-код в документы одного или другого типа.
|
||
</para>
|
||
|
||
<para>
|
||
За тегом <literal><?php</literal> обязательно указывают
|
||
пробельный символ наподобие пробела, символа табуляции или новой строки,
|
||
чтобы правильно разделить токены.
|
||
Без пробельного символа возникнет синтаксическая ошибка.
|
||
</para>
|
||
|
||
<para>
|
||
PHP также включает короткий echo-тег <literal><?=</literal> —
|
||
сокращение более многословного синтаксиса <code><?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><?php ?></code> и <code><?= ?></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-интерпретатор встречает закрывающие теги ?>,
|
||
он просто начинает выводить всё, что находит, — за исключением перевода строки, который
|
||
идёт сразу за закрывающим тегом, как описывает раздел
|
||
«<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><?php ?></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>// ... ?></literal>
|
||
или <literal># ... ?></literal> выводится: тег ?> прерывает
|
||
режим разбора 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
|
||
-->
|