-
Notifications
You must be signed in to change notification settings - Fork 80
Expand file tree
/
Copy pathprint.xml
More file actions
225 lines (194 loc) · 8.21 KB
/
print.xml
File metadata and controls
225 lines (194 loc) · 8.21 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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 45042fef652f1b4e904e809fcbfcf31f6c60670b Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://docbook.org/ns/docbook" xml:id="function.print">
<refnamediv>
<refname>print</refname>
<refpurpose>Выводит строку</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type><methodname>print</methodname>
<methodparam><type>string</type><parameter>expression</parameter></methodparam>
</methodsynopsis>
<para>
Языковая конструкция выводит выражение <parameter>expression</parameter>.
</para>
<para>
<literal>print</literal> — не функция, а языковая конструкция.
Аргумент языковой конструкции — выражение после ключевого слова <literal>print</literal>
без круглых скобок.
</para>
<para>
Основные отличия от конструкции <function>echo</function> состоят в том,
что конструкция <literal>print</literal> принимает только один аргумент
и при каждом вызове возвращает значение <literal>1</literal>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>expression</parameter></term>
<listitem>
<para>
Выражение, которое требуется вывести. Нестроковые значения преобразуются в строки,
даже если <link linkend="language.types.declarations.strict">включили директиву
<literal>strict_types</literal></link>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Языковая конструкция всегда возвращает <literal>1</literal>.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Примеры использования языковой конструкции <literal>print</literal></title>
<programlisting role="php">
<![CDATA[
<?php
print "print не требует скобок.";
print PHP_EOL;
// Новая строка или пробел не добавляются; ниже выводится "приветмир" в одну строку
print "привет";
print "мир";
print PHP_EOL;
print "Эта строка занимает
несколько строк. Новые строки
тоже выводятся";
print PHP_EOL;
print "Эта строка занимает\nнесколько строк. Новые строки\nтоже выводятся";
print PHP_EOL;
// В аргументах разрешается передавать выражения, которые вычисляются как строки
$foo = "пример";
print "foo — это $foo"; // foo — это пример
print PHP_EOL;
$fruits = ["лимон", "апельсин", "банан"];
print implode(" и ", $fruits); // лимон и апельсин и банан
print PHP_EOL;
// Нестроковые выражения приводятся к строковым,
// даже при установке строгой проверки типов конструкцией declare(strict_types=1)
print 6 * 7; // 42
print PHP_EOL;
// Конструкция print возвращает значение и поэтому допускается в выражениях
// Следующие выходные данные "привет мир"
if ( print "привет" ) {
echo " мир";
}
print PHP_EOL;
// Следующее выражение выводит "true"
( 1 === 1 ) ? print 'true' : print 'false';
print PHP_EOL;
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<title>Использование с круглыми скобками</title>
<para>
Заключение аргумента конструкции <literal>print</literal> в круглые скобки
не вызовет синтаксической ошибки и создаст синтаксис, который выглядит как обычный
вызов функции. Однако это вводит в заблуждение, поскольку круглые скобки —
часть выводимого выражения, а не часть самого синтаксиса <literal>print</literal>.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
print "привет";
// Выведет "привет"
print("привет");
// Тоже выведет "привет", потому что ("привет") — корректное выражение
print(1 + 2) * 3;
// Выведет "9"; круглые скобки приводят к тому, что сначала вычисляется выражение 1 + 2, а затем выражение 3 * 3;
// конструкция print видит всё выражение как один аргумент
if (print("привет") && false) {
print " — внутри if";
} else {
print " — внутри else";
}
// Выведет " — внутри if".
// Сначала вычисляется выражение ("привет") && false, которое возвращает false,
// это приводится к пустой строке "" и выводится.
// Затем конструкция print возвращает 1, поэтому выполняется код в блоке if
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
При вызове конструкции <literal>print</literal> в более крупном выражении
иногда требуется взять ключевое слово и его аргумент
в круглые скобки, чтобы получить правильный результат:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
if ((print "привет") && false) {
print " — внутри if";
} else {
print " — внутри else";
}
// Выведет "привет — внутри else".
// В отличие от предыдущего примера, выражение (print "привет") вычисляется первым.
// После вывода строки "привет" языковая конструкция print возвращает 1,
// поскольку выражение 1 && false — ложно, выполняется код в блоке else
print "привет " && print "мир";
// Выведет "мир1"; выражение print "мир" выполняется в первую очередь,
// тогда выражение "привет" && 1 передается в левую часть print
(print "привет ") && (print "мир");
// Выведет "привет мир"; круглые скобки заставляют выражения print
// выполнятьтся перед оператором &&
?>
]]>
</programlisting>
</informalexample>
</para>
</note>
¬e.language-construct;
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>echo</function></member>
<member><function>printf</function></member>
<member><function>flush</function></member>
<member><link linkend="language.types.string">Способы работы со строками</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- 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
-->