-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathecho.xml
247 lines (219 loc) · 7.64 KB
/
echo.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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 2a5223230bf6177c225003ca30c63f48ef266cc0 Maintainer: sammywg Status: ready -->
<refentry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://docbook.org/ns/docbook" xml:id="function.echo">
<refnamediv>
<refname>echo</refname>
<refpurpose>Gibt einen oder mehrere Strings aus</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>void</type><methodname>echo</methodname>
<methodparam rep="repeat"><type>string</type><parameter>expressions</parameter></methodparam>
</methodsynopsis>
<simpara>
Gibt einen oder mehrere Ausdrücke ohne zusätzliche Zeilenumbrüche oder
Leerzeichen aus.
</simpara>
<para>
<literal>echo</literal> ist keine Funktion, sondern ein Sprachkonstrukt.
Seine Argumente sind eine Liste von Ausdrücken, die dem Schlüsselwort
<literal>echo</literal> folgen und nicht durch Kommas getrennt und durch
Klammern abgegrenzt sind. Im Gegensatz zu einigen anderen Sprachkonstrukten
hat <literal>echo</literal> keinen Rückgabewert, sodass es nicht im
Zusammenhang mit einem Ausdruck verwendet werden kann.
</para>
<para>
<literal>echo</literal> besitzt zusätzlich eine Syntax-Kurzform, bei der
Sie ein Gleichheitszeichen direkt nach einem öffnenden PHP-Tag anfügen.
Diese Syntax ist auch bei deaktivierter Konfigurationseinstellung
<link linkend="ini.short-open-tag">short_open_tag</link> verfügbar.
<informalexample>
<programlisting role="php">
<![CDATA[
Ich habe <?=$foo?> foo.
]]>
</programlisting>
</informalexample>
</para>
<para>
Der Hauptunterschied zu <literal>print</literal> ist, dass
<literal>echo</literal> mehrere Argumente entgegennimmt, und keinen
Rückgabewert hat.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>expressions</parameter></term>
<listitem>
<para>
Ein oder mehrere durch Kommas getrennte String-Ausdrücke, die
ausgegeben werden sollen. Nicht-String-Werte werden in Strings
umgewandelt, auch wenn <link
linkend="language.types.declarations.strict">die Direktive
<literal>strict_types</literal></link> aktiviert ist.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.void;
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><literal>echo</literal>-Beispiele</title>
<programlisting role="php">
<![CDATA[
<?php
echo "echo benötigt keine Klammern.";
// Strings können entweder individuell als mehrere Argumente oder
// miteinander verbunden als einzelnes Argument übergeben werden
echo 'Dieser ', 'String ', 'besteht ', 'aus ', 'mehreren Parametern.', "\n";
echo 'Dieser ' . 'String ' . 'wurde ' . 'mit ' . 'Stringverkettung erzeugt.' . "\n";
// Es wird kein Zeilenumbruch oder Leerzeichen eingefügt; das Folgende gibt
// "HalloWelt" in einer Zeile aus
echo "Hallo";
echo "Welt";
// Dasselbe wie oben
echo "Hallo", "Welt";
echo "Dieser String umfasst
mehrere Zeilen. Die Zeilenumbrüche
werden mit ausgegeben.";
echo "Dieser String umfasst\nmehrere Zeilen. Die Zeilenumbrüche\nwerden mit ausgegeben.";
// Das Argument kann ein beliebiger Ausdruck sein, der einen String erzeugt
$foo = "ein Beispiel";
echo "foo ist $foo"; // foo ist ein Beispiel
$fruechte = ["Zitrone", "Orange", "Banane"];
echo implode(" und ", $fruechte); // Zitrone und Orange und Banane
// Nicht-String-Ausdrücke werden in String umgewandelt, auch wenn
// declare(strict_types=1) verwendet wird
echo 6 * 7; // 42
// Da echo sich nicht wie ein Ausdruck verhält, ist der folgende Code ungültig.
($eine_variable) ? echo 'true' : echo 'false';
// Folgende Beispiele funktionieren hingegen:
($eine_variable) ? print 'true' : print 'false'; // print ist auch ein Konstrukt,
// aber es ist ein gültiger Ausdruck, der 1 zurückgibt,
// also kann es in diesem Kontext verwendet werden.
echo $eine_variable ? 'true': 'false'; // den Ausdruck zuerst auswerten und
// dann an echo übergeben
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
¬e.language-construct;
<note>
<title>Die Verwendung mit Klammern</title>
<para>
Wenn ein einzelnes Argument in Klammern an <literal>echo</literal>
übergeben wird, löst das keinen Syntaxfehler aus und erzeugt eine Syntax,
die wie ein normaler Funktionsaufruf aussieht. Dies kann jedoch
irreführend sein, denn die Klammern sind tatsächlich Teil des
auszugebenden Ausdrucks und nicht Teil der <literal>echo</literal>-Syntax
selbst.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo "Hallo";
// gibt "Hallo" aus
echo("Hallo");
// gibt auch "Hallo" aus, weil ("Hallo") ein gültiger Ausdruck ist
echo(1 + 2) * 3;
// gibt "9" aus; die Klammern bewirken, dass zuerst 1+2 ausgewertet wird, dann 3*3
// Die echo-Anweisung sieht den gesamten Ausdruck als ein Argument
echo "Hallo", " Welt";
// gibt "Hallo Welt" aus
echo("Hallo"), (" Welt");
// gibt "Hallo Welt" aus; die Klammern sind Teil des jeweiligen Ausdrucks
echo("Hallo", " Welt");
// löst eine Syntaxfehler aus, weil ("Hallo", " Welt") kein gültiger Ausdruck ist
?>
]]>
</programlisting>
</informalexample>
</para>
</note>
<tip>
<para>
Die Übergabe mehrerer Argumente an <literal>echo</literal> kann
Schwierigkeiten vermeiden, die durch den Vorrang des Verkettungsoperators
in PHP entstehen. Zum Beispiel hat der Verkettungsoperator eine höhere
Priorität als der Ternäre und vor PHP 8.0.0 hatte er die gleiche Rangfolge
wie die Addition und die Subtraktion:
</para>
<programlisting role="php">
<![CDATA[
<?php
// Im Folgenden wird der Ausdruck 'Hallo ' . isset($name) zuerst ausgewertet
// und ist immer wahr, daher ist das Argument für echo immer $name
echo 'Hallo ' . isset($name) ? $name : 'Max Mustermann' . '!';
// Das beabsichtigte Verhalten erfordert zusätzliche Klammern
echo 'Hallo ' . (isset($name) ? $name : 'Max Mustermann') . '!';
// Vor PHP 8.0.0 gibt das folgende "2" aus, statt "Summe: 3"
echo 'Sum: ' . 1 + 2;
// Auch hier stellt das Hinzufügen von Klammern die beabsichtigte Reihenfolge
// der Auswertung sicher
echo 'Summe: ' . (1 + 2);
]]>
</programlisting>
<para>
Falls mehrere Argumente übergeben werden, dann sind Klammern nicht
erforderlich, um die Vorrangigkeit zu erzwingen, da jeder Ausdruck für
sich steht:
</para>
<programlisting role="php">
<![CDATA[
<?php
echo "Hallo ", isset($name) ? $name : "Max Mustermann", "!";
echo "Summe: ", 1 + 2;
]]>
</programlisting>
</tip>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>print</function></member>
<member><function>printf</function></member>
<member><function>flush</function></member>
<member><link linkend="language.types.string" >Möglichkeiten literale Strings anzugeben</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
-->