-
Notifications
You must be signed in to change notification settings - Fork 44
/
Copy pathexpressions.xml
243 lines (238 loc) · 11.2 KB
/
expressions.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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: f4f96ef8b2a95283c92ea2183fe1dedf06f3ad22 Maintainer: sammywg Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="language.expressions" xmlns="http://docbook.org/ns/docbook">
<title>Ausdrücke</title>
<simpara>
Ausdrücke (Expressions) sind die wichtigsten Bausteine von PHP. In
PHP ist fast alles, was geschrieben wird, ein Ausdruck. Die einfachste,
aber auch zutreffendste Definition für einen Ausdruck ist "alles, was
einen Wert hat".
</simpara>
<simpara>
Die grundlegendsten Formen von Ausdrücken sind Konstanten und Variablen.
Wenn man <code>$a = 5</code> schreibt, weist man <varname>$a</varname> den
Ausdruck <code>5</code> zu. <code>5</code> hat offensichtlich den Wert 5.
Anders ausgedrückt: <code>5</code> ist ein Ausdruck mit dem Wert 5 (in
diesem Fall ist <code>5</code> eine Integer-Konstante).
</simpara>
<simpara>
Nach dieser Zuweisung würde man erwarten, dass der Wert von
<varname>$a</varname> nun ebenfalls 5 ist; wenn man also
<code>$b = $a</code> schreibt, sollte dasselbe dabei herauskommen, als hätte
man <code>$b = 5</code> geschrieben. Anders ausgedrückt:
<varname>$a</varname> ist ebenfalls ein Ausdruck mit dem Wert 5. Wenn alles
richtig funktioniert, wird genau das passieren.
</simpara>
<para>
Etwas kompliziertere Beispiele für Ausdrücke sind Funktionen.
Betrachten wir zum Beispiel die folgende Funktion:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
function foo ()
{
return 5;
}
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Angenommen, Sie sind mit dem Konzept von Funktionen vertraut (wenn
Sie es nicht sind, lesen Sie das Kapitel über
<link linkend="language.functions">Funktionen</link>), dann würden Sie davon
ausgehen, dass die Eingabe von <code>$c = foo()</code> grundsätzlich
dasselbe bedeutet, als würde man <code>$c = 5</code> schreiben, und genau
das trifft zu. Funktionen sind Ausdrücke mit dem Wert ihres Rückgabewertes.
Da <code>foo()</code> den Wert 5 zurückgibt, ist der Wert des Ausdruckes
'<code>foo()</code>' 5. Normalerweise geben Funktionen nicht einfach einen
statischen Wert zurück, sondern berechnen etwas.
</simpara>
<simpara>
Natürlich müssen Werte in PHP keine Integer-Zahlen sein, und oft sind
sie es auch nicht. PHP unterstützt vier skalare Datentypen:
<type>int</type> (Ganzzahlen), <type>float</type> (Fließkommazahlen),
<type>string</type> (Zeichenketten) und <type>bool</type>
(Wahrheitswerte). (Skalare sind Datentypen, die man, im Gegensatz zu zum
Beispiel Arrays, nicht in kleinere Stücke 'brechen' kann.) PHP
unterstützt auch zwei zusammengesetzte (nicht-skalare) Datentypen:
Arrays und Objekte. Jeder dieser Datentypen kann Variablen zugewiesen
und von Funktionen zurückgegeben werden.
</simpara>
<simpara>
PHP fasst den Begriff Ausdruck aber noch viel weiter, wie es auch andere
Programmiersprachen tun. PHP ist eine ausdrucksorientierte Sprache, in
dem Sinne, dass fast alles einen Ausdruck darstellt. Zurück zu dem
Beispiel, mit dem wir uns bereits beschäftigt haben: <code>$a = 5</code>. Es
ist einfach zu erkennen, dass hier zwei Werte enthalten sind: Der Wert der
Integer-Konstanten <code>5</code> und der Wert von <varname>$a</varname>,
der ebenfalls auf 5 geändert wird. In Wirklichkeit ist aber noch ein
weiterer Wert enthalten, nämlich der Wert der Zuweisung selbst. Die Zuweisung
selbst enthält den zugewiesenen Wert, in diesem Fall 5. In der Praxis
bedeutet dies, dass <code>$a = 5</code>, egal was es tut, immer einen
Ausdruck mit dem Wert 5 darstellt. Folglich ist <code>$b = ($a = 5)</code>
gleichbedeutend mit <code>$a = 5; $b = 5;</code> (ein Semikolon markiert das
Ende einer Anweisung). Da Wertzuweisungen von rechts nach links geparst
werden, kann man auch <code>$b = $a = 5</code> schreiben.
</simpara>
<simpara>
Ein anderes gutes Beispiel für die Ausdrucksorientierung von PHP sind Prä-
und Post-Inkrement sowie die entsprechenden Dekremente. Benutzer von PHP und
vielen anderen Sprachen sind vermutlich mit den Notationen
<code>variable++</code> und <code>variable--</code> vertraut. Dies sind
<link linkend="language.operators.increment">Inkrement- und Dekrement-Operatoren</link>.
In PHP gibt es, wie in C, zwei Arten von Inkrementen - Prä-Inkrement und
Post-Inkrement. Grundsätzlich erhöhen sowohl Prä- als auch Post-Inkrement
den Wert der Variable, und der Effekt auf die Variable ist derselbe. Der
Unterschied liegt im Wert des Inkrement-Ausdruckes. Das Prä-Inkrement, das
<code>++$variable</code> geschrieben wird, enthält als Wert den Wert der
erhöhten Variable (PHP erhöht den Wert der Variablen, bevor es ihren Wert
ausliest, daher der Name 'PRÄ-Inkrement'). Das Post-Inkrement, das
<code>$variable++</code> geschrieben wird, enthält dagegen den
ursprünglichen Wert von <varname>$variable</varname> vor der Erhöhung (PHP
erhöht den Wert der Variablen, nachdem es ihren Wert ausgelesen hat, daher
der Name 'POST-Inkrement').
</simpara>
<simpara>
Ein sehr gebräuchlicher Typ von Ausdrücken sind
<link linkend="language.operators.comparison">Vergleichsausdrücke</link>.
Diese Ausdrücke geben entweder &false; oder &true; zurück. PHP unterstützt
> (größer), >= (größer oder gleich), == (gleich), != (ungleich),
< (kleiner), und <= (kleiner oder gleich). Die Sprache unterstützt
weiterhin ein Set von absoluten Vergleichsoperatoren: === (inhalts- und
typgleich) und !== (nicht inhalts- oder typgleich). Diese Ausdrücke werden
meist in bedingten Anweisungen, wie &zb; in
<code>if</code>-Anweisungen, verwendet.
</simpara>
<simpara>
Im letzten Beispiel für Ausdrücke befassen wir uns mit kombinierten
Zuweisungs- und Operator-Ausdrücken. Wir wissen bereits, dass, wenn wir
<varname>$a</varname> um 1 erhöhen wollen, wir einfach
<code>$a++</code> oder <code>++$a</code> schreiben können.
Aber was tut man, wenn man den Wert um mehr als eins erhöhen will, &zb;
um 3? Man könnte mehrere Male <code>$a++</code> schreiben, aber das
ist offensichtlich weder ein effizienter noch komfortabler Weg. Viel
üblicher ist es, einfach <code>$a = $a + 3</code>
zu schreiben. <code>$a + 3</code> gibt den Wert von
<varname>$a</varname> plus 3 zurück, dieser wird wieder <varname>$a</varname>
zugewiesen, was dazu führt, dass <varname>$a</varname> nun um 3 erhöht wurde.
In PHP - wie in einigen anderen Programmiersprachen, &zb; in C - kann man
dies aber noch kürzer schreiben, was mit der Zeit klarer wird und auch
einfacher zu verstehen ist. Um 3 zu dem aktuellen Wert von
<varname>$a</varname> hinzuzufügen, schreibt man <code>$a += 3</code>.
Das bedeutet exakt: "Nimm den Wert von <varname>$a</varname>, addiere 3
hinzu und weise <varname>$a</varname> den entstandenen Wert zu". Zusätzlich
dazu, dass diese Schreibweise kürzer und klarer ist, wird sie auch schneller
ausgeführt. Der Wert von <code>$a += 3</code> ist, wie der Wert
einer regulären Zuweisung, der zugewiesene Wert. Beachten Sie, dass dieser
Wert NICHT 3, sondern dem kombinierten Wert von <varname>$a</varname> plus 3
entspricht (das ist der Wert, der <varname>$a</varname> zugewiesen wird).
Jeder Operator, der zwei Elemente verbindet, kann in dieser Schreibweise
verwendet werden, &zb; <code>$a -= 5</code> (vermindert den Wert
von <varname>$a</varname> um 5) oder <code>$b *= 7</code>
(multipliziert den Wert von <varname>$b</varname> mit 7), usw.
</simpara>
<para>
Es gibt einen weiteren Ausdruck, der Ihnen vielleicht seltsam vorkommt,
wenn Sie ihn bisher noch in keiner Programmiersprache kennengelernt
haben, den dreifach konditionalen Operator:
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$eins ? $zwei : $drei
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
Wenn der Wert des ersten Sub-Ausdruckes (hier: $eins) &true; ist
(&dh; nicht 0), dann wird der Wert des zweiten Subausdrucks
(hier: $zwei) ausgewertet und ist das Ergebnis des konditionalen
Ausdrucks. Andernfalls wird der dritte Subausdruck ausgewertet und
dessen Wert zurückgegeben.
</para>
<para>
Das folgende Beispiel sollte das Verständnis von Prä- und
Post-Inkrement und von Ausdrücken im Allgemeinen erleichtern:
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
function verdoppeln($i)
{
return $i*2;
}
$b = $a = 5; /* Weise den Variablen $a und $b den Wert 5 zu */
$c = $a++; /* Post-Inkrement, der urspruengliche Wert von $a (5)
wird $c zugewiesen. */
$e = $d = ++$b; /* Prae-Inkrement, der erhöhte Wert von $b (6) wird $d und
$e zugewiesen. */
/* An diesem Punkt sind $d und $e beide gleich 6 */
$f = verdoppeln($d++); /* Weise $f den doppelten Wert von $d vor
der Erhöhung um eins zu, 2*6 = 12 */
$g = verdoppeln(++$e); /* Weise $g den doppelten Wert von $e nach
der Erhoehung um eins zu, 2*7 = 14 to $g */
$h = $g += 10; /* Zuerst wird $g um 10 erhöht und hat damit den Wert
24. Der Wert dieser Zuweisung (24) wird dann $h
zugewiesen, womit $h ebenfalls den Wert von 24 hat. */
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Einige Ausdrücke können wie Anweisungen verwendet werden. In diesem Falle
hat eine Anweisung die Form '<code>expr ;</code>', dies meint einen Ausdruck
gefolgt von einem Semikolon. In <code>$b = $a = 5;</code> ist
<code>$a = 5</code> ein gültiger Ausdruck, aber für sich allein keine
Anweisung. <code>$b = $a = 5;</code> ist jedoch eine gültige Anweisung.
</simpara>
<simpara>
Ein letzter Punkt, der noch zu erwähnen ist, ist der Wahrheitswert
von Ausdrücken. In vielen Fällen, hauptsächlich in bedingten
Anweisungen und Schleifen, ist man nicht am spezifischen Wert
eines Ausdrucks interessiert, sondern kümmert sich nur darum,
ob er &true; oder &false; bedeutet.
<!-- (PHP hat keinen speziellen boolean-Datentyp). -->
Die Konstanten &true; und &false; (case-insensitiv) sind die beiden
möglichen Wahrheitswerte. Wenn nötig wird ein Ausdruck automatisch in
einen Booleschen Wert konvertiert. Wenn Sie mehr darüber erfahren wollen,
lesen Sie den Abschnitt über
<link linkend="language.types.typecasting">Typecasting</link>.
</simpara>
<simpara>
PHP stellt eine vollständige und mächtige Implementierung von Ausdrücken
bereit, deren vollständige Dokumentation den Rahmen dieses Manuals
sprengen würde. Die obigen Beispiele sollten Ihnen einen guten Eindruck
davon verschaffen, was Ausdrücke sind und wie man nützliche Ausdrücke
konstruieren kann. Im Rest dieses Manuals werden wir
<varname>expr</varname> schreiben, um auszudrücken, dass an dieser
Stelle jeder gültige PHP-Ausdruck stehen kann.
</simpara>
</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:
-->