mirror of
https://github.com/php/doc-ru.git
synced 2026-03-25 16:22:18 +01:00
275 lines
13 KiB
XML
275 lines
13 KiB
XML
<?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><?php</literal> и <literal>?></literal>,
|
||
которые указывают PHP, когда начинать и заканчивать обработку кода
|
||
между ними. Подобный способ обработки позволяет PHP внедряться во
|
||
все виды различных документов, так как всё, что находится вне пары
|
||
открывающих и закрывающих тегов, будет проигнорировано парсером PHP.
|
||
</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.ini; или отключены по умолчанию, если
|
||
PHP был скомпилирован с опцией <option>--disable-short-tags</option>.
|
||
</para>
|
||
<para>
|
||
<note>
|
||
<para>
|
||
Поскольку короткие теги можно отключить, рекомендуется использовать только обычные
|
||
теги (<code><?php ?></code> и <code><?= ?></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 встречает закрывающие теги ?>,
|
||
он просто начинает выводить все что найдёт (за исключением сразу следующего
|
||
символа перевода строки - смотрите раздел
|
||
<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 стандартам, вам следует использовать форму
|
||
<?php ?>.
|
||
</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>// ... ?></literal>
|
||
или <literal># ... ?></literal> БУДЕТ напечатан: ?> завершает
|
||
режим 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
|
||
-->
|