<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/langref.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'language.expressions.php',
    1 => 'Ausdr&uuml;cke',
    2 => 'Ausdr&uuml;cke',
  ),
  'up' => 
  array (
    0 => 'langref.php',
    1 => 'Sprachreferenz',
  ),
  'prev' => 
  array (
    0 => 'language.constants.magic.php',
    1 => 'Magische Konstanten',
  ),
  'next' => 
  array (
    0 => 'language.operators.php',
    1 => 'Operatoren',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'language/expressions.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.expressions" class="chapter">
 <h1 class="title">Ausdrücke</h1>

 <p class="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 &quot;alles, was
  einen Wert hat&quot;.
 </p>
 <p class="simpara">
  Die grundlegendsten Formen von Ausdrücken sind Konstanten und Variablen.
  Wenn man <code class="code">$a = 5</code> schreibt, weist man <var class="varname">$a</var> den
  Ausdruck <code class="code">5</code> zu. <code class="code">5</code> hat offensichtlich den Wert 5.
  Anders ausgedrückt: <code class="code">5</code> ist ein Ausdruck mit dem Wert 5 (in
  diesem Fall ist <code class="code">5</code> eine Integer-Konstante).
 </p>
 <p class="simpara">
  Nach dieser Zuweisung würde man erwarten, dass der Wert von
  <var class="varname">$a</var> nun ebenfalls 5 ist; wenn man also
  <code class="code">$b = $a</code> schreibt, sollte dasselbe dabei herauskommen, als hätte
  man <code class="code">$b = 5</code> geschrieben. Anders ausgedrückt:
  <var class="varname">$a</var> ist ebenfalls ein Ausdruck mit dem Wert 5. Wenn alles
  richtig funktioniert, wird genau das passieren.
 </p>
 <p class="para">
  Etwas kompliziertere Beispiele für Ausdrücke sind Funktionen.
  Betrachten wir zum Beispiel die folgende Funktion:
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo </span><span style="color: #007700">()<br />{<br />    return </span><span style="color: #0000BB">5</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="simpara">
  Angenommen, Sie sind mit dem Konzept von Funktionen vertraut (wenn
  Sie es nicht sind, lesen Sie das Kapitel über
  <a href="language.functions.php" class="link">Funktionen</a>), dann würden Sie davon
  ausgehen, dass die Eingabe von <code class="code">$c = foo()</code> grundsätzlich
  dasselbe bedeutet, als würde man <code class="code">$c = 5</code> schreiben, und genau
  das trifft zu. Funktionen sind Ausdrücke mit dem Wert ihres Rückgabewertes.
  Da <code class="code">foo()</code> den Wert 5 zurückgibt, ist der Wert des Ausdruckes
  &#039;<code class="code">foo()</code>&#039; 5. Normalerweise geben Funktionen nicht einfach einen
  statischen Wert zurück, sondern berechnen etwas.
 </p>
 <p class="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:
  <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> (Ganzzahlen), <span class="type"><a href="language.types.float.php" class="type float">float</a></span> (Fließkommazahlen),
  <span class="type"><a href="language.types.string.php" class="type string">string</a></span> (Zeichenketten) und <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
  (Wahrheitswerte). (Skalare sind Datentypen, die man, im Gegensatz zu zum
  Beispiel Arrays, nicht in kleinere Stücke &#039;brechen&#039; 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.
 </p>
 <p class="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 class="code">$a = 5</code>. Es
  ist einfach zu erkennen, dass hier zwei Werte enthalten sind: Der Wert der
  Integer-Konstanten <code class="code">5</code> und der Wert von <var class="varname">$a</var>,
  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 class="code">$a = 5</code>, egal was es tut, immer einen
  Ausdruck mit dem Wert 5 darstellt. Folglich ist <code class="code">$b = ($a = 5)</code>
  gleichbedeutend mit <code class="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 class="code">$b = $a = 5</code> schreiben.
 </p>
 <p class="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 class="code">variable++</code> und <code class="code">variable--</code> vertraut. Dies sind
  <a href="language.operators.increment.php" class="link">Inkrement- und Dekrement-Operatoren</a>.
  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 class="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 &#039;PRÄ-Inkrement&#039;). Das Post-Inkrement, das
  <code class="code">$variable++</code> geschrieben wird, enthält dagegen den
  ursprünglichen Wert von <var class="varname">$variable</var> vor der Erhöhung (PHP
  erhöht den Wert der Variablen, nachdem es ihren Wert ausgelesen hat, daher
  der Name &#039;POST-Inkrement&#039;).
 </p>
 <p class="simpara">
  Ein sehr gebräuchlicher Typ von Ausdrücken sind
  <a href="language.operators.comparison.php" class="link">Vergleichsausdrücke</a>.
  Diese Ausdrücke geben entweder <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> oder <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> zurück. PHP unterstützt
  &gt; (größer), &gt;= (größer oder gleich), == (gleich), != (ungleich),
  &lt; (kleiner), und &lt;= (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 z. B. in
  <code class="code">if</code>-Anweisungen, verwendet.
 </p>
 <p class="simpara">
  Im letzten Beispiel für Ausdrücke befassen wir uns mit kombinierten
  Zuweisungs- und Operator-Ausdrücken. Wir wissen bereits, dass, wenn wir
  <var class="varname">$a</var> um 1 erhöhen wollen, wir einfach
  <code class="code">$a++</code> oder <code class="code">++$a</code> schreiben können.
  Aber was tut man, wenn man den Wert um mehr als eins erhöhen will, z. B.
  um 3? Man könnte mehrere Male <code class="code">$a++</code> schreiben, aber das
  ist offensichtlich weder ein effizienter noch komfortabler Weg. Viel
  üblicher ist es, einfach <code class="code">$a = $a + 3</code>
  zu schreiben. <code class="code">$a + 3</code> gibt den Wert von
  <var class="varname">$a</var> plus 3 zurück, dieser wird wieder <var class="varname">$a</var>
  zugewiesen, was dazu führt, dass <var class="varname">$a</var> nun um 3 erhöht wurde.
  In PHP - wie in einigen anderen Programmiersprachen, z. B. 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
  <var class="varname">$a</var> hinzuzufügen, schreibt man <code class="code">$a += 3</code>.
  Das bedeutet exakt: &quot;Nimm den Wert von <var class="varname">$a</var>, addiere 3
  hinzu und weise <var class="varname">$a</var> den entstandenen Wert zu&quot;. Zusätzlich
  dazu, dass diese Schreibweise kürzer und klarer ist, wird sie auch schneller
  ausgeführt. Der Wert von <code class="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 <var class="varname">$a</var> plus 3
  entspricht (das ist der Wert, der <var class="varname">$a</var> zugewiesen wird).
  Jeder Operator, der zwei Elemente verbindet, kann in dieser Schreibweise
  verwendet werden, z. B. <code class="code">$a -= 5</code> (vermindert den Wert
  von <var class="varname">$a</var> um 5) oder <code class="code">$b *= 7</code>
  (multipliziert den Wert von <var class="varname">$b</var> mit 7), usw.
 </p>
 <p class="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:
 </p>
 <p class="para">
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$eins </span><span style="color: #007700">? </span><span style="color: #0000BB">$zwei </span><span style="color: #007700">: </span><span style="color: #0000BB">$drei<br />?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  Wenn der Wert des ersten Sub-Ausdruckes (hier: $eins) <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> ist
  (d. h. 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.
 </p>
 <p class="para">
  Das folgende Beispiel sollte das Verständnis von Prä- und
  Post-Inkrement und von Ausdrücken im Allgemeinen erleichtern:
 </p>
 <p class="para">
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">verdoppeln</span><span style="color: #007700">(</span><span style="color: #0000BB">$i</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #0000BB">$i</span><span style="color: #007700">*</span><span style="color: #0000BB">2</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">;        </span><span style="color: #FF8000">/* Weise den Variablen $a und $b den Wert 5 zu */<br /></span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">$a</span><span style="color: #007700">++;          </span><span style="color: #FF8000">/* Post-Inkrement, der urspruengliche Wert von $a (5)<br />                       wird $c zugewiesen. */<br /></span><span style="color: #0000BB">$e </span><span style="color: #007700">= </span><span style="color: #0000BB">$d </span><span style="color: #007700">= ++</span><span style="color: #0000BB">$b</span><span style="color: #007700">;     </span><span style="color: #FF8000">/* Prae-Inkrement, der erhöhte Wert von $b (6) wird $d und<br />                       $e zugewiesen. */<br /><br />/* An diesem Punkt sind $d und $e beide gleich 6 */<br /><br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= </span><span style="color: #0000BB">verdoppeln</span><span style="color: #007700">(</span><span style="color: #0000BB">$d</span><span style="color: #007700">++);  </span><span style="color: #FF8000">/* Weise $f den doppelten Wert von $d vor<br />                           der Erhöhung um eins zu, 2*6 = 12 */<br /></span><span style="color: #0000BB">$g </span><span style="color: #007700">= </span><span style="color: #0000BB">verdoppeln</span><span style="color: #007700">(++</span><span style="color: #0000BB">$e</span><span style="color: #007700">);  </span><span style="color: #FF8000">/* Weise $g den doppelten Wert von $e nach<br />                           der Erhoehung um eins zu, 2*7 = 14 to $g */<br /></span><span style="color: #0000BB">$h </span><span style="color: #007700">= </span><span style="color: #0000BB">$g </span><span style="color: #007700">+= </span><span style="color: #0000BB">10</span><span style="color: #007700">;      </span><span style="color: #FF8000">/* Zuerst wird $g um 10 erhöht und hat damit den Wert<br />                       24. Der Wert dieser Zuweisung (24) wird dann $h<br />                       zugewiesen, womit $h ebenfalls den Wert von 24 hat. */<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="simpara">
  Einige Ausdrücke können wie Anweisungen verwendet werden. In diesem Falle
  hat eine Anweisung die Form &#039;<code class="code">expr ;</code>&#039;, dies meint einen Ausdruck
  gefolgt von einem Semikolon. In <code class="code">$b = $a = 5;</code> ist
  <code class="code">$a = 5</code> ein gültiger Ausdruck, aber für sich allein keine
  Anweisung. <code class="code">$b = $a = 5;</code> ist jedoch eine gültige Anweisung.
 </p>
 <p class="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 <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> oder <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> bedeutet.

  

  Die Konstanten <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> und <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> (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
  <a href="language.types.type-juggling.php#language.types.typecasting" class="link">Typecasting</a>.
 </p>
 <p class="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
  <var class="varname">expr</var> schreiben, um auszudrücken, dass an dieser
  Stelle jeder gültige PHP-Ausdruck stehen kann.
 </p>
</div>
<?php manual_footer($setup); ?>