-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathbasic-syntax.xml
255 lines (237 loc) · 7.92 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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- $Author$ -->
<!-- EN-Revision: 6b09bb638aa64d1fad5f4a630a8da9a2692ce733 Maintainer: verdana Status:ready -->
<!-- CREDITS: dallas -->
<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 'if you want to serve PHP code in XHTML or XML documents,
use these tags'; ?>
2. You can use the short echo tag to <?= 'print this string' ?>.
It's equivalent to <?php echo 'print this string' ?>.
3. <? echo 'this code is within short tags, but will only work '.
'if short_open_tag is enabled'; ?>
]]>
</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 结束标记之后万一意外加入了空格或者换行符,会导致
PHP 开始输出这些空白,而脚本中此时并无输出的意图。
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo "Hello world";
// ... 更多代码
echo "Last statement";
// 脚本在此处结束,没有 PHP 结束标记
]]>
</programlisting>
</informalexample>
</para>
</sect1>
<sect1 xml:id="language.basic-syntax.phpmode">
<title>从 HTML 中分离</title>
<para>
凡是在一对开始和结束标记之外的内容都会被
PHP 解析器忽略,这使得 PHP 文件可以具备混合内容。 可以使 PHP
嵌入到 HTML 文档中去,如下例所示。
<informalexample>
<programlisting role="php">
<![CDATA[
<p>This is going to be ignored by PHP and displayed by the browser.</p>
<?php echo 'While this is going to be parsed.'; ?>
<p>This will also be ignored by PHP and displayed by the browser.</p>
]]>
</programlisting>
</informalexample>
这将如预期中的运行,因为当 PHP 解释器碰到 ?>
结束标记时就简单地将其后内容原样输出(除非马上紧接换行 - 见
<link linkend="language.basic-syntax.instruction-separation">指令分隔符</link>)直到碰到下一个开始标记;例外是处于条件语句中间时,此时
PHP 解释器会根据条件判断来决定哪些输出,哪些跳过。见下例。
</para>
<para>
使用条件结构:
<example>
<title>使用条件的高级分离术</title>
<programlisting role="php">
<![CDATA[
<?php if ($expression == true): ?>
This will show if the expression is true.
<?php else: ?>
Otherwise this will show.
<?php endif; ?>
]]>
</programlisting>
</example>
上例中 PHP 将跳过条件语句未达成的段落,即使该段落位于 PHP 开始和结束标记之外。由于
PHP 解释器会在条件未达成时直接跳过该段条件语句块,因此 PHP 会根据条件来忽略之。
</para>
<para>
要输出大段文本时,跳出 PHP 解析模式通常比将文本通过
<function>echo</function> 或 <function>print</function> 输出更有效率。
</para>
<para>
<note>
<para>
此外注意如果将 PHP 嵌入到 XML 或 XHTML 中则需要使用
<code><?php ?></code> 标记以保持符合标准。
</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 "Some text"; ?>
No newline
<?= "But newline now" ?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Some textNo newline
But newline now
]]>
</screen>
</example>
</para>
<para>
进入和退出 PHP 解析的例子:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo 'This is a test';
?>
<?php echo 'This is a test' ?>
<?php echo 'We omitted the last closing tag';
]]>
</programlisting>
</informalexample>
<note>
<para>
文件末尾的 PHP 代码段结束标记可以不要,有些情况下当使用
<function>include</function> 或者 <function>require</function>
时省略掉会更好些,这样不期望的空白符就不会出现在文件末尾,之后仍然可以输出响应标头。在使用输出缓冲时也很便利,就不会看到由包含文件生成的不期望的空白符。
</para>
</note>
</para>
</sect1>
<sect1 xml:id="language.basic-syntax.comments">
<title>注释</title>
<para>
PHP 支持 C,C++ 和 Unix Shell 风格(Perl 风格)的注释。例如:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo 'This is a test'; // 这是单行 c++ 样式注释
/* 这是一条多行注释
另一行也是注释 */
echo 'This is yet another test';
echo 'One Final Test'; # 这是单行 shell 风格的注释
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
单行注释仅仅注释到行末或者当前的 PHP 代码块,视乎哪个首先出现。这意味着在
<literal>// ... ?></literal> 或者 <literal># ... ?></literal>
之后的 HTML 代码将被显示出来:?>
跳出了 PHP 模式并返回了 HTML 模式,<literal>//</literal> 或 <literal>#</literal>
并不能影响到这一点。
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<h1>This is an <?php # echo 'simple';?> example</h1>
<p>The header above will say 'This is an example'.</p>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
C 风格的注释在碰到第一个 <literal>*/</literal>
时结束。要确保不要嵌套 C 风格的注释。试图注释掉一大块代码时很容易出现该错误。
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
/*
echo 'This is a test'; /* 这个注释会引发问题 */
*/
?>
]]>
</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
-->