1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-25 16:22:18 +01:00
Files
archived-doc-ru/language/basic-syntax.xml
Sergey Panteleev daef8df962 Обнуление тега Reviewed (#364)
[skip-lint]
[skip-spellcheck]
2021-11-16 13:03:53 +03:00

275 lines
13 KiB
XML
Raw 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: 6b09bb638aa64d1fad5f4a630a8da9a2692ce733 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="language.basic-syntax" xmlns="http://docbook.org/ns/docbook">
<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>
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.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 начинает выводить данные в буфер при отсутствии намерения у
программиста выводить какие-либо данные в этой точке скрипта.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo "Hello world";
// ... ещё код
echo "Последнее выражение";
// Скрипт заканчивается тут без закрывающего тега PHP
]]>
</programlisting>
</informalexample>
</para>
</sect1>
<sect1 xml:id="language.basic-syntax.phpmode">
<title>Изолирование от HTML</title>
<para>
Все, что находится вне пары открывающегося и закрывающегося тегов, игнорируется
интерпретатором PHP, у которого есть возможность обрабатывать файлы со смешанным содержимым. Это позволяет PHP-коду
быть встроенным в документы HTML, к примеру, для создания шаблонов.
<informalexample>
<programlisting role="php">
<![CDATA[
<p>Это будет проигнорировано PHP и отображено браузером.</p>
<?php echo 'А это будет обработано.'; ?>
<p>Это тоже будет проигнорировано PHP и отображено браузером.</p>
]]>
</programlisting>
</informalexample>
Это работает так, как и ожидается, потому что когда интерпретатор PHP встречает закрывающие теги ?&gt;,
он просто начинает выводить все что найдёт (за исключением сразу следующего
символа перевода строки - смотрите раздел
<link linkend="language.basic-syntax.instruction-separation">разделение инструкций</link>)
пока не встретит другой открывающий тег за исключением случая с
содержащимся внутри кода условным оператором, в котором интерпретатор определяет результат
условия перед принятием решения что пропустить.
Ознакомьтесь со следующим примером.
</para>
<para>
Использование структур с условиями
<example>
<title>Продвинутое изолирование с использованием условий</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>
Кроме того, если вы намереваетесь вставлять PHP-код в XML или XHTML,
чтобы соответствовать XML стандартам, вам следует использовать форму
&lt;?php ?&gt;.
</para>
</note>
</para>
</sect1>
<sect1 xml:id="language.basic-syntax.instruction-separation">
<title>Разделение инструкций</title>
<para>
Как в C или Perl, PHP требует окончания инструкций точкой запятой в конце
каждой инструкции. Закрывающий тег блока PHP-кода автоматически применяет
точку с запятой; т.е. нет необходимости ставить точку с запятой в конце последней
строки блока с PHP-кодом. Закрывающий тег блока "поглотит" немедленно следующий
за ним переход на новую строку, если таковой будет обнаружен.
</para>
<para>
<example>
<title>Пример, показывающий закрывающий тег, охватывающий завершающую новую строку</title>
<programlisting role="php">
<![CDATA[
<?php echo "Какой-то текст"; ?>
Нет новой строки
<?= "А сейчас, новая строка" ?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Какой-то текстНет новой строки
А сейчас, новая строка
]]>
</screen>
</example>
</para>
<para>
Примеры входа и выхода из парсера PHP:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo 'Это тест';
?>
<?php echo 'Это тест' ?>
<?php echo 'Мы опустили последний закрывающий тег';
]]>
</programlisting>
</informalexample>
<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). Например:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo "Это тест"; // Это однострочный комментарий в стиле C++
/* Это многострочный комментарий
ещё одна строка комментария */
echo "Это ещё один тест";
echo "Последний тест"; # Это комментарий в стиле оболочки Unix
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Однострочные комментарии идут только до конца строки или текущего
блока PHP-кода, в зависимости от того, что идёт перед ними.
Это означает, что HTML-код после <literal>// ... ?&gt;</literal>
или <literal># ... ?&gt;</literal> БУДЕТ напечатан: ?&gt; завершает
режим PHP и возвращает режим HTML, а <literal>//</literal> или
<literal>#</literal> не могут повлиять на это.
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<h1>Это <?php # echo "простой";?> пример</h1>
<p>Заголовок вверху выведет 'Это пример'.</p>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
'C'-комментарии заканчиваются при первой же обнаруженной последовательности
<literal>*/</literal>. Убедитесь, что вы не вкладываете друг в друга
'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
-->