-
Notifications
You must be signed in to change notification settings - Fork 80
Expand file tree
/
Copy pathbasic-syntax.xml
More file actions
334 lines (321 loc) · 17.6 KB
/
basic-syntax.xml
File metadata and controls
334 lines (321 loc) · 17.6 KB
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
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 298f39a1cf7377bb5c383936d664403212fd9cab Maintainer: shein Status: ready -->
<!-- Reviewed: yes -->
<!-- $Revision$ -->
<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>
PHP также допускает короткий открывающий тег <literal><?</literal>,
однако использовать их нежелательно, так как они доступны только если включены с помощью
конфигурационной директивы &php.ini; <link linkend="ini.short-open-tag">short_open_tag</link>,
либо если PHP был сконфигурирован с опцией <option>--enable-short-tags</option>.
</para>
<para>
Если файл содержит только код PHP, предпочтительно опустить закрывающий тег в
конце файла. Это помогает избежать добавления случайных символов пробела или перевода
строки после закрывающего тега PHP, которые могут послужить причиной нежелательных
эффектов, так как PHP начинает выводить данные в буфер при отсутствии намерения у
программиста выводить какие-либо данные в этой точке скрипта.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo "Hello world";
// ... еще код
echo "Последнее выражение";
// Скрипт заканчивается тут без закрывающего тега PHP
]]>
</programlisting>
</informalexample>
</para>
<para>
<table>
&reftitle.changelog;
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.0.0</entry>
<entry>
ASP-теги <code><%</code>, <code>%></code>,
<code><%=</code>, и теги скриптов
<code><script language="php"></code> удалены из PHP.
</entry>
</row>
<row>
<entry>5.4.0</entry>
<entry>
Тег <?= доступен всегда, вне зависимости от настройки short_open_tag.
</entry>
</row>
</tbody>
</tgroup>
</table>
</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>
В PHP 5, существует до пяти различных пар тегов, которые могут быть использованы
для обозначения PHP-кода, в зависимости от того, как был сконфигурирован PHP.
Из них только две <code><?php ?></code> и
<code><script language="php"> </script></code> доступны всегда.
Также, начиная с PHP 5.4.0, третьей, доступной всегда, парой тегов является <code><?= ?></code>.
</para>
<para>
Другими двумя являются короткие теги и теги в стиле <productname>ASP</productname>,
которые могут быть включены или выключены в конфигурационном файле &php.ini;.
Хотя короткие теги и теги в стиле <productname>ASP</productname> могут быть
удобны, они не так переносимы, как длинные версии, и поэтому не рекомендуются.
<note>
<para>
Кроме того, если вы намереваетесь вставлять PHP-код в XML или XHTML,
чтобы соответствовать XML стандартам, вам следует использовать форму
<?php ?>.
</para>
</note>
</para>
<para>
В PHP 7 удалена поддержка тегов <productname>ASP</productname> и
<code><script language="php"></code>. Так что мы рекомендуем использовать только
<code><?php ?></code> и <code><?= ?></code> для максимальной
совместимости и переносимости.
</para>
<para>
<example>
<title>Открывающие и закрывающие теги PHP</title>
<programlisting role="php">
<![CDATA[
1. <?php echo 'если вы хотите хранить код PHP в документах XHTML или XML,
то используйте эти теги'; ?>
2. Вы можете использовать короткий 'echo'-тег чтобы <?= 'напечатать эту строку' ?>.
Он всегда разрешен начиная с PHP 5.4.0. Этот тег эквивалентен такому коду
<?php echo 'напечатать эту строку' ?>.
3. <? echo 'этот код с короткими тегами, но он будет работать только если '.
'включена опция "short_open_tag"'; ?>
4. <script language="php">
echo 'некоторые редакторы (например, FrontPage) не
любят инструкции обработки с этими тегами';
</script>
Поддержка такого синтаксиса удалена в PHP 7.0.0.
5. <% echo 'Также вы можете использовать теги в ASP стиле'; %>
Код с такими тегами <%= $variable; %> является сокращением от <% echo $variable; %>
Поддержка обоих этих синтаксисов удалена в PHP 7.0.0.
]]>
</programlisting>
</example>
</para>
<para>
Короткие теги (третий пример) доступны, только когда они включены с помощью
директивы <link linkend="ini.short-open-tag">short_open_tag</link> в
конфигурационном файле &php.ini;, либо если PHP был скомпилирован с опцией
<option>--enable-short-tags</option>.
</para>
<para>
<productname>ASP</productname>-теги (пятый пример) доступны, только
когда они включены с помощью директивы <link linkend="ini.asp-tags">asp_tags</link>
в конфигурационном файле &php.ini;. В PHP 7.0.0 их поддержка удалена.
</para>
<para>
<note>
<para>
Следует избегать использования коротких тегов при разработке
приложений или библиотек, предназначенных для распространения
или размещения на PHP-серверах, не находящихся под вашим
контролем, так как короткие теги могут не поддерживаться на
целевом сервере. Для создания переносимого, совместимого
кода, не используйте короткие теги.
</para>
</note>
<note>
<para>
В PHP 5.2 и более ранних версиях парсер не позволял файлам содержать только
один открытый тег <literal><?php</literal>. Это было разрешено, начиная
с версии PHP 5.3 при наличии одного или более пробела после открывающего тега.
</para>
</note>
<note>
<para>
Начиная с PHP 5.4 короткий тег echo <literal><?=</literal> всегда распознается и действует,
несмотря на значение опции <link linkend="ini.short-open-tag">short_open_tag</link>.
</para>
</note>
</para>
</sect1>
<sect1 xml:id="language.basic-syntax.instruction-separation">
<title>Разделение инструкций</title>
<para>
Как в C или Perl, PHP требует окончания инструкций точкой запятой в конце
каждой инструкции. Закрывающий тег блока PHP-кода автоматически применяет
точку с запятой; т.е. нет необходимости ставить точку с запятой в конце последней
строки блока с 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> не могут повлиять на это. Если включена директива
<link linkend="ini.asp-tags">asp_tags</link>, то аналогичное поведение будет
и с <literal>// %></literal> и <literal># %></literal>.
Однако, тег <literal></script></literal> не завершает режим PHP
в однострочном комментарии.
</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
-->