-
Notifications
You must be signed in to change notification settings - Fork 76
/
Copy pathbasic-syntax.xml
299 lines (276 loc) · 13.8 KB
/
basic-syntax.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
<?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
-->