-
Notifications
You must be signed in to change notification settings - Fork 44
/
Copy pathassignment.xml
257 lines (245 loc) · 7.03 KB
/
assignment.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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 43d07782b514d0c7a8487f2c74063739f302df8d Maintainer: nobody Status: ready -->
<!-- Reviewed: yes -->
<!-- Rev-Revision: e4b889a3e8b9d87ab605aac9bbe85d2c16c69a1b Reviewer: samesch -->
<!-- CREDITS: tzwenny, betz -->
<sect1 xml:id="language.operators.assignment">
<title>Zuweisungsoperatoren</title>
<titleabbrev>Zuweisung</titleabbrev>
<simpara>
Der einfachste Zuweisungsoperator ist "=". Wahrscheinlich kommt man als
erstes auf die Idee, ihn mit "ist gleich" zu bezeichnen. Das ist falsch. In
Wirklichkeit bedeutet er, dass dem linken Operanden der Wert des Ausdrucks
auf der rechten Seite zugewiesen wird (man müsste ihn also mit "wird gesetzt
auf den Wert von" übersetzen).
</simpara>
<para>
Der Wert eines Zuweisungs-Ausdruckes ist der zugewiesene Wert, &dh; der Wert
des Ausdruckes "<literal>$a = 3</literal>" ist 3. Das erlaubt es, einige
raffinierte Dinge anzustellen:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$a = ($b = 4) + 5; // $a ist nun gleich 9 und $b wurde auf den Wert 4 gesetzt.
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
Zusätzlich zu dem oben vorgestellten Zuweisungsoperator "=" gibt es
"kombinierte Operatoren" für alle
<link linkend="language.operators">binären, arithmetischen</link>,
Array-Vereinigungs- und Zeichenketten-Operatoren, die es erlauben, den Wert
einer Variablen in einem Ausdruck zu benutzen und dieser anschließend das
Ergebnis des Ausdrucks als neuen Wert zuzuweisen. Zum Beispiel:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$a = 3;
$a += 5; // setzt $a auf den Wert 8, als ob wir geschrieben hätten: $a = $a + 5;
$b = "Hallo ";
$b .= "Du!"; // setzt $b auf den Wert "Hallo Du!", äquivalent zu
// $b = $b . "Du!";
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
Man beachte, dass die Zuweisung nur den Wert der Ursprungsvariable der neuen
Variable zuweist (Zuweisung als Wert, sie "kopiert"), weshalb sich
Änderungen an der einen Variable nicht auf die andere auswirken werden. Das
kann wichtig sein, wenn man ein großes Array o. ä. in einer Schleife
kopieren muss.
</para>
<para>
Eine Ausnahme vom üblichen Wertzuweisungsverhalten in PHP stellen Objekte
(<type>object</type>) dar, die per Referenz zugewiesen werden. Objekte
können mit dem
<link linkend="language.oop5.cloning">clone</link>-Schlüsselwort explizit
kopiert werden.
</para>
<sect2 xml:id="language.operators.assignment.reference">
<title>Referenzzuweisung</title>
<para>
Referenzzuweisung wird ebenfalls unterstützt, unter Verwendung der
"<computeroutput>$var = &$othervar;</computeroutput>" Syntax.
Referenzzuweisung bedeutet, dass beide Variablen schließlich auf dieselben
Daten zeigen, und nichts kopiert wurde.
</para>
<para>
<example>
<title>Referenzzuweisung</title>
<programlisting role="php">
<![CDATA[
<?php
$a = 3;
$b = &$a; // $b ist eine Referenz auf $a
print "$a\n"; // gibt 3 aus
print "$b\n"; // gibt 3 aus
$a = 4; // ändere $a
print "$a\n"; // gibt 4 aus
print "$b\n"; // gibt ebenfalls 4 aus, da $b eine Referenz auf $a ist, das
// geändert wurde
?>
]]>
</programlisting>
</example>
</para>
<para>
Der <link linkend="language.oop5.basic.new">new</link>-Operator gibt
automatisch eine Referenz zurück, sodass das Zuweisen des Ergebnisses von
<link linkend="language.oop5.basic.new">new</link> per Referenz ein Fehler
ist.
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
class C {}
$o = &new C;
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Parse error: syntax error, unexpected 'new' (T_NEW) in …
]]>
</screen>
</informalexample>
</para>
<para>
Weitere Informationen zu Referenzen und ihren Anwendungsmöglichkeiten
sind dem Handbuch-Abschnitt
<link linkend="language.references">Referenzen erklärt</link> zu entnehmen.
</para>
</sect2>
<sect2 xml:id="language.operators.assignment.arithmetic">
<title>Arithmetische Zuweisungsoperatoren</title>
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry>Beispiel</entry>
<entry>Entsprechung</entry>
<entry>Operation</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a += $b</entry>
<entry>$a = $a + $b</entry>
<entry>Addition</entry>
</row>
<row>
<entry>$a -= $b</entry>
<entry>$a = $a - $b</entry>
<entry>Subtraktion</entry>
</row>
<row>
<entry>$a *= $b</entry>
<entry>$a = $a * $b</entry>
<entry>Multiplikation</entry>
</row>
<row>
<entry>$a /= $b</entry>
<entry>$a = $a / $b</entry>
<entry>Division</entry>
</row>
<row>
<entry>$a %= $b</entry>
<entry>$a = $a % $b</entry>
<entry>Modulus</entry>
</row>
<row>
<entry>$a **= $b</entry>
<entry>$a = $a ** $b</entry>
<entry>Potenzierung</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 xml:id="language.operators.assignment.bitwise">
<title>Bitweise Zuweisungsoperatoren</title>
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry>Beispiel</entry>
<entry>Entsprechung</entry>
<entry>Operation</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a &= $b</entry>
<entry>$a = $a & $b</entry>
<entry>Und</entry>
</row>
<row>
<entry>$a |= $b</entry>
<entry>$a = $a | $b</entry>
<entry>Oder</entry>
</row>
<row>
<entry>$a ^= $b</entry>
<entry>$a = $a ^ $b</entry>
<entry>Xor</entry>
</row>
<row>
<entry>$a <<= $b</entry>
<entry>$a = $a << $b</entry>
<entry>Linksverschiebung</entry>
</row>
<row>
<entry>$a >>= $b</entry>
<entry>$a = $a >> $b</entry>
<entry>Rechtsverschiebung</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 xml:id="language.operators.assignment.other">
<title>Andere Zuweisungspperatoren</title>
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry>Beispiel</entry>
<entry>Entsprechung</entry>
<entry>Operation</entry>
</row>
</thead>
<tbody>
<row>
<entry>$a .= $b</entry>
<entry>$a = $a . $b</entry>
<entry>Stringverknüpfung</entry>
</row>
<row>
<entry>$a ??= $b</entry>
<entry>$a = $a ?? $b</entry>
<entry>Null-Zusammenführungsoperator</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2 role="seealso" xml:id="language.operators.assignment.see-also">
&reftitle.seealso;
<para>
<simplelist>
<member><link linkend="language.operators.arithmetic">Arithmetische Operatoren</link></member>
<member><link linkend="language.operators.bitwise">Bit-Operatoren</link></member>
<member><link linkend="language.operators.comparison.coalesce">Null-Koaleszenz-Operator</link></member>
</simplelist>
</para>
</sect2>
</sect1>