betz            Tue Jan  1 10:21:29 2002 EDT

  Modified files:              
    /phpdoc/de/language types.xml 
  Log:
  finished changes.  update to en 1.70
  
Index: phpdoc/de/language/types.xml
diff -u phpdoc/de/language/types.xml:1.17 phpdoc/de/language/types.xml:1.18
--- phpdoc/de/language/types.xml:1.17   Wed Dec 12 15:46:23 2001
+++ phpdoc/de/language/types.xml        Tue Jan  1 10:21:29 2002
@@ -1,87 +1,468 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
  <chapter id="language.types">
   <title>Typen</title>
-  <!-- Anmerkung des Übersetzers:
-       entspricht en/language/types.xml Vers 1.12 -->
-  
+
+  <sect1 id="language.types.intro">
+  <title>Einführung</title>
+  <simpara>
+   PHP unterstützt acht primitive Typen.
+  </simpara>
+
   <para>
-   PHP unterstützt die folgenden Typ-Deklarationen:
+   Vier skalare Typen:
    <itemizedlist>
+
     <listitem>
      <simpara>
-      <link linkend="language.types.array">Array</link>
+      <link linkend="language.types.boolean">Boolean</link>
      </simpara>
     </listitem>
+
     <listitem>
      <simpara>
-      <link linkend="language.types.float">Fließkomma-Zahl</link>
+      <link linkend="language.types.integer">Integer</link>
      </simpara>
     </listitem>
+
     <listitem>
      <simpara>
-      <link linkend="language.types.integer">Integer</link>
+      <link linkend="language.types.float">Fließkomma-Zahl (float)</link>
+     </simpara>
+    </listitem>
+
+    <listitem>
+     <simpara>
+      <link linkend="language.types.string">String / Zeichenkette</link>
+     </simpara>
+    </listitem>
+
+   </itemizedlist>
+
+   Zwei zusammengesetzte Typen:
+
+   <itemizedlist>
+
+    <listitem>
+     <simpara>
+      <link linkend="language.types.array">Array</link>
      </simpara>
     </listitem>
+
     <listitem>
      <simpara>
       <link linkend="language.types.object">Object</link>
      </simpara>
     </listitem>
+
+   </itemizedlist>
+
+   Und zuletzt zwei spezielle Typen:
+
+   <itemizedlist>
+
     <listitem>
      <simpara>
-      <link linkend="language.types.string">String / Zeichenkette</link>
+      <link linkend="language.types.resource">Resource</link>
+     </simpara>
+    </listitem>
+
+    <listitem>
+     <simpara>
+      <link linkend="language.types.null">NULL</link>
      </simpara>
     </listitem>
+
    </itemizedlist>
   </para>
+
+  <note>
+   <simpara>
+    In diesem Manual werden Sie oft <literal>mixed</literal> Parameter
+    finden. Diese Pseudo-Typen weisen darauf hin, dass es mehrere Möglichkeiten
+    für diesen Parameter gibt.
+   </simpara>
+  </note>
+
+
+
   <simpara>
    Der Typ einer Variabalen wird normalerweise nicht vom Programmierer
    bestimmt; vielmehr wird dies zur Laufzeit von PHP entschieden,
    abhängig vom Zusammenhang in dem die Variable benutzt wird.
   </simpara>
+  <tip>
+   <simpara>
+    Um den Typ und den Wert eines bestimmten
+    <link linkend="language.expressions">Ausdrucks (Expression)</link>
+    zu überprüfen, können Sie <function>var_dump</function> benutzen.
+   </simpara>
+   <simpara>
+    Wenn Sie zur Fehlersuche einfach nur eine lesbare Darstellung
+    eines Typs benötigen, benutzen Sie <function>gettype</function>.
+    Um auf einen bestimmten Typ zu prüfen, sollten Sie <emphasis>nicht</emphasis>
+    <function>gettype</function> benutzen. Stattdessen sollten Sie die
+    <literal>is_<replaceable>type</replaceable></literal> Funktionen verwenden.
+   </simpara>
+  </tip>
+   <simpara>
+    Wenn sie die Umwandlung in einen bestimmten Variablen-Typ erzwingen
+    wollen, erreichen Sie dies entweder durch
+    <link linkend="language.types.typecasting">cast</link> oder durch
+    Gebrauch der Funktion <function>settype</function>.
+   </simpara>
   <simpara>
-   Wenn sie die Umwandlung in einen bestimmten Variablen-Typ erzwingen
-   wollen, können sie dies entweder per <link
-   linkend="language.types.typecasting">cast</link> oder durch
-   Gebrauch der Funktion <function>settype</function>.
-  </simpara>
-  <simpara>
-   Beachten Sie, dass eine Variable je nach Gebrauch und Situation auf
-   unterschiedliche Art und Weise typisiert sein kann. Weitere
-   Informationen sehen sie unter <link
-   linkend="language.types.type-juggling">Typ-Veränderung</link>.
+   Beachten Sie, dass sich eine Variable in bestimmten Situationen
+   unterschiedlich verhalten kann, abhängig vom Typ dem die Variable zu dem 
+   Zeitpunkt entspricht. Weitere Informationen entnehmen Sie dem Abschnitt zur
+   <link linkend="language.types.type-juggling">Typ-Veränderung</link>.
   </simpara>
+  </sect1>
+
+   <sect1 id="language.types.boolean">
+    <title>Boolscher Typ</title>
+    
+    <simpara>
+     Das ist der einfachste Typ. Ein <type>boolean</type> drückt einen
+     Wahrheitswert aus. Dieser kann entweder &true; oder &false; sein.
+    </simpara>
+
+    <note>
+     <simpara>
+      Der boolsche Typ wurde in PHP 4 eingeführt.
+     </simpara>
+    </note>
+
+    <sect2 id="language.types.boolean.syntax">
+     <title>Syntax</title>
+     <para>
+      Um einen boolschen Typ wörtlich anzugeben, benutzen Sie entweder 
+      das Schlüsselwort &true; oder &false;.
+      Beide unterscheiden sich nicht bezüglich der Groß- und Kleinschreibung.
+     <informalexample>
+       <programlisting role="php">
+<![CDATA[
+$foo = True; // $foo wird der Wert TRUE zugewiesen
+]]>
+       </programlisting>
+      </informalexample>
+     </para>
+     <para>
+      Üblicherweise verwenden Sie einen der 
+      <link linkend="language.operators">Operatoren</link>, der Ihnen
+      einen <type>boolean</type> Wert liefert, den Sie dann an eine der
+      <link linkend="control-structures">Kontroll-Strukturen</link> weiterreichen.
+      <informalexample>
+       <programlisting role="php">
+<![CDATA[
+// == ist ein Vergleichs-Operator der einen boolschen Wert liefert
+if ($action == "show_version") {
+    echo "Die Version ist 1.23";
+}
+
+// Das ist nicht notwendig:
+if ($show_separators == TRUE) {
+    echo "<hr>\n";
+}
+
+// weil Sie einfach folgendes schreiben können:
+if ($show_separators) {
+    echo "<hr>\n";
+}
+]]>
+       </programlisting>
+      </informalexample>
+     </para>
+    </sect2>
+
+    <sect2 id="language.types.boolean.casting">
+     <title>Umwandlung nach boolean</title>
+      <simpara>
+       Um einen Wert ausdrücklich nach <type>boolean</type> zu konvertieren
+       benutzen Sie entweder die Umwandlung mittels
+       <literal>(bool)</literal> oder <literal>(boolean)</literal>.
+       In den allermeisten Fällen ist es jedoch nicht notwendig die
+       Umwandlung selbst vorzunehmen. Ein Wert wird automatisch konvertiert,
+       falls ein Operator, eine Funktion oder eine Kontrollstruktur ein
+       <type>boolean</type> Argument erfordert.
+      </simpara>
+      <simpara>
+       Siehe auch
+      <link linkend="language.types.type-juggling">Typ-Veränderung</link>.
+      </simpara>
+      
+      <para>
+       Bei der Umwandlung nach <type>boolean</type> werden folgende Werte
+       als &false; angesehen:
+
+       <itemizedlist>
+
+        <listitem>
+         <simpara>das <link linkend="language.types.boolean">boolean</link> 
+          &false;
+         </simpara>
+        </listitem>
+
+        <listitem>
+         <simpara>die
+          <link linkend="language.types.integer">Integer</link> 0 (Null)
+         </simpara>
+        </listitem>
+
+        <listitem>
+         <simpara>die
+          <link linkend="language.types.float">Fließkomma-Zahl</link> 0.0 (Null)
+         </simpara>
+        </listitem>
+
+        <listitem>
+         <simpara>die leere
+          <link linkend="language.types.string">Zeichenkette</link>
+          und die
+          <link linkend="language.types.string">Zeichenkette</link> "0"
+         </simpara>
+        </listitem>
+
+        <listitem>
+         <simpara>ein <link linkend="language.types.array">Array</link>
+          ohne Elemente
+         </simpara>
+        </listitem>
+
+        <listitem>
+         <simpara>ein <link linkend="language.types.object">Object</link>
+          ohne Elemente
+         </simpara>
+        </listitem>
+
+        <listitem>
+         <simpara>der spezielle Type
+          <link linkend="language.types.null">NULL</link>
+          (einschließlich nicht definierter Variablen)
+         </simpara>
+        </listitem>
+
+       </itemizedlist>
+       
+       Jeder andere Wert wird als &true; angesehen (einschließlich jeder
+       <link linkend="language.types.resource">Resource</link>).
+       <warning>
+        <simpara>
+         <literal>-1</literal> wird als 
+         &true; angesehen, wie jede andere Zahl ungleich Null
+         (egal ob negativ oder positiv)!
+        </simpara>
+       </warning>
+      </para>
+     
+    </sect2>
+
+   </sect1>
 
   <sect1 id="language.types.integer">
-   <title>Integer-Typen</title>
-   <para>
-    Integer-Typen können durch Gebrauch einer der folgenden
-    Zuweisungsarten angegeben werden:
-    <informalexample>
-     <programlisting role="php">
-$a = 1234; # Zahlenwert im dezimal-Format
-$a = -123; # ein negativer Zahlenwert
-$a = 0123; # Oktal-Zahl (83 im dezimal-Format) Achtung: 
-           # Fehlerquelle bei Strings mit führenden Nullen!
-$a = 0x12; # Zahlenwert im hexadezimal-Format
-           # (entspricht 18 im dezimal-Format)
-     </programlisting>
-    </informalexample>
-    Die Größe eines Integer-Wertes ist plattformabhängig, ein
-               Wertebereich von ca. +/- 2 Milliarden ist aber üblich
-    (Vorzeichen-behafteter 32-Bit-Wert).
-   </para>
+   <title>Integer Typen</title>
+
+    <simpara>
+     Ein <type>Integer</type> ist eine Nummer aus der Menge
+     Z = {..., -2, -1, 0, 1, 2, ...}.
+    </simpara>
+
+    <para>
+     Siehe auch:
+     <link linkend="ref.gmp">Beleibig präzise Ganzzahlen</link> und
+     <link linkend="language.types.float">Fließkomma-Zahlen</link>
+    </para>
+
+    <sect2 id="language.types.integer.syntax">
+     <title>Syntax</title>
+     <simpara>
+      Ganzzahlen können in dezimaler (10-basierter), hexadezimaler
+      (16-basierter) oder oktaler (8-basierter) Schreibweise angegeben
+      werden, wahlweise mit einem vorangestellten Zeichen (- oder +).
+     </simpara>
+     <para>
+      Wenn Sie die oktale Schreibweise verwenden, müssen Sie die Zahl mit
+      einer vorangestellten Null <literal>0</literal> schreiben; in
+      hexadezimaler Schreibweise müssen Sie vor die Zahl ein
+      <literal>0x</literal> schreiben.
+      <example>
+       <title>Integer Buchstaben</title>
+       <programlisting role="php">
+<![CDATA[
+$a = 1234; // Dezimalzahl
+$a = -123; // eine negative Zahl
+$a = 0123; // Oktalzahl (entspricht 83 dezimal)
+$a = 0x1A; // Hexadezimalzahl (entspricht 26 dezimal)
+]]>
+       </programlisting>
+      </example>
+      Die Größe eines Integer-Wertes ist plattformabhängig, ein
+      Maximalwert von ungefähr zwei Billionen ist jedoch üblich.
+      (Vorzeichen-behafteter 32-Bit-Wert). PHP unterstützt keine 
+      vorzeichenlose Integer-Werte.
+     </para>
+    </sect2>
+   
+    <sect2 id="language.types.integer.overflow">
+     <title>Integer Überlauf</title>
+     <para>
+      Wenn Sie eine Zahl jenseits der Grenzen des Typs <type>Integer</type>
+      angeben, wird diese stattdessen als Typ <type>float</type> interpretiert.
+      Wenn Sie eine Operation ausführen, deren Ergebnis eine Zahl
+      jenseits der Grenzen des Typs <type>Integer</type> ist, wird ebenso eine
+      Zahl vom Typ <type>float</type> zurückgegeben.
+
+      <informalexample>
+       <programlisting role="php">
+<![CDATA[
+$large_number =  2147483647;
+var_dump($large_number);
+// Ausgabe: int(2147483647)
+
+$large_number =  2147483648;
+var_dump($large_number);
+// Ausgabe: float(2147483648)
+
+// das gilt auch für Integers in hexadezimaler Schreibweise:
+var_dump( 0x80000000 );
+// Ausgabe: float(2147483648)
+
+$million = 1000000;
+$large_number =  50000 * $million;
+var_dump($large_number);
+// Ausgabe: float(50000000000)
+]]>
+       </programlisting>
+      </informalexample>
+      <warning>
+       <simpara>
+        Bedauerlicherweise gab es einen Bug in PHP, der die korrekte
+        Funktionsweise verhinderte, wenn negative Zahlen verwendet wurden.
+        Ein Beispiel: Bei der Ausführung von
+        <literal>-50000 * $million</literal> war das Ergebnis
+        <literal>-429496728</literal>. Sind beide Operanden positiv gibt
+        gibt es keine Probleme.
+       </simpara>
+       <simpara>
+        Dieses Problem ist in PHP 4.1.0 behoben.
+       </simpara>
+      </warning>
+     </para>
+     <para>
+      In PHP gibt es keinen Operator für Integer Divisonen.
+      <literal>1/2</literal> ergibt <type>float</type>
+      <literal>0.5</literal>.
+      <informalexample>
+       <programlisting role="php">
+<![CDATA[
+var_dump( 25/7 );
+// Ausgabe: float(3.5714285714286)
+]]>
+       </programlisting>
+      </informalexample>
+     </para>
+    </sect2>
+   
+
+    <sect2 id="language.types.integer.casting">
+     <title>Umwandlung nach Integer</title>
+      <simpara>
+       Um einen Wert ausdrücklich nach <type>integer</type> zu konvertieren
+       benutzen Sie entweder die Umwandlung mittels
+       <literal>(int)</literal> oder <literal>(integer)</literal>.
+       In den allermeisten Fällen ist es jedoch nicht notwendig die
+       Umwandlung selbst vorzunehmen. Ein Wert wird automatisch konvertiert,
+       falls ein Operator, eine Funktion oder eine Kontrollstruktur ein
+       <type>integer</type> Argument erfordert.
+      </simpara>
+      <simpara>
+       Siehe auch <link linkend="language.types.type-juggling">Typ-Veränderung</link>.
+      </simpara>
+      
+      <sect3 id="language.types.integer.casting.from-boolean">
+       <title>Von
+        <link linkend="language.types.boolean">Booleans</link>
+       </title>
+       <simpara>
+        &false; ergibt
+        <literal>0</literal> (Null), und &true; 
+        ergibt <literal>1</literal> (eins).
+       </simpara>
+      </sect3>
+
+      <sect3 id="language.types.integer.casting.from-float">
+       <title>Von
+        <link linkend="language.types.float">Fließkomma-Zahlen</link>
+       </title> 
+       <simpara>
+        Bei der Umwandlung von <type>float</type> nach integer wird die Zahl
+        <emphasis>in Richtung Null</emphasis> gerundet.
+       </simpara>
+       
+       <para>
+        Wenn der float jenseits der Grenzen von integer liegt
+       (üblicherweise <literal>+/- 2.15e+9 = 2^31</literal>), 
+        ist das Ergebnis nicht definiert, weil float nicht genug
+        Präzision besitzt um ein genaues integer Ergebnis zu liefern.
+        Keine Warnung, nicht einmal eine Notiz wird in diesem Fall ausgegeben.
+       </para>
+       
+       <warning>
+       <para>
+        Wandeln Sie nie ein Teil eines Ausdrucks nach <type>integer</type> um,
+        da dies manchmal zu unerwarteten Ergebnissen führen kann.
+        <informalexample>
+         <programlisting role="php">
+<![CDATA[
+echo (int) ( (0.1+0.7) * 10 ); // Ausgabe: 7!
+]]>
+         </programlisting>
+        </informalexample>
+        Für mehr Informationen schauen Sie unter
+        <link linkend="warn.float-precision">Warnung über float-Präzision</link>.
+        nach.
+       </para>
+       </warning>
+      </sect3>
+      
+      <sect3 id="language.types.integer.casting.from-string">
+       <title>Von Zeichenketten/ Strings</title>
+       <simpara>
+        Siehe
+        <link linkend="language.types.string.conversion">String Umwandlung</link>
+       </simpara>
+      </sect3>
+      
+      <sect3 id="language.types.integer.casting.from-other">
+       <title>Von anderen Typen</title>
+       <para>
+        <caution>
+         <simpara>
+          Das Verhalten bei der Umwandlung nach integer ist für andere
+          Typen nicht definiert. Zum gegenwärtigen Zeitpunkt ist das Verhalten
+          so, als ob der Wert zuerst nach
+          <link linkend="language.types.boolean.casting">boolean</link>
+          konvertiert wird. Auf jeden Fall sollten Sie sich auf dieses Verhalten
+          <emphasis>nicht</emphasis> verlassen. Es kann sich ohne Ankündigung
+          ändern.
+         </simpara>
+        </caution>
+       </para>
+      </sect3>
+      
+    </sect2>
   </sect1>
+
    
   <sect1 id="language.types.float">
    <title>Fließkomma-Zahlenwerte</title>
    <para>
-    Fließkomma-Zahlenwerte ("doubles") können durch eine der folgenden
-    Anweisungen zugewiesen werden:
+    Fließkomma-Zahlenwerte (AKA "floats", "doubles" or "real numbers")
+    können durch eine der folgenden Anweisungen zugewiesen werden:
     <informalexample>
      <programlisting role="php">
 $a = 1.234;
 $a = 1.2e3;
+$a = 7E-10;
      </programlisting>
     </informalexample>
     Die Größe einer Fließkomma-Zahl ist plattformabhängig, dennoch
@@ -89,29 +470,31 @@
     Nachkomma-Stellen einen üblichen Wert dar (das ist 64-Bit im
     IEEE-Format).
    </para>
-   <warning id="warn.float.precision">
+   <warning id="warn.float-precision">
+    <title>Fließkomma Päzision</title>
     <para>
-     Es ist normal, dass einfache Dezimalzahlen wie
+     Es ist ziemlich normal, dass einfache Dezimalzahlen wie
      <literal>0.1</literal> oder <literal>0.7</literal> nicht in ihre
      internen binären Entsprechungen konvertiert werden können, ohne
-     einen Teil ihrer Genauigkeit zu verlieren. Das kann zu
-     verwirrenden Ergebnissen führen. So wird <literal>floor ((0.1 +
+     einen kleinen Teil ihrer Genauigkeit zu verlieren. Das kann zu
+     verwirrenden Ergebnissen führen. So wird <literal>floor((0.1 +
      0.7) * 10)</literal> normalerweise <literal>7</literal> statt des
      erwarteten Wertes <literal>8</literal> zurück geben (als Ergebnis
      der internen Entsprechung von <literal>7.9999999999...</literal>.
     </para>
     <para>
-     Da es unmöglich ist, manche Dezimal-Zahlen durch eine begrenzte
-     Anzahl an Nachkomma-Stellen darzu stellen, ist dies ein Fakt.
-     Dem Wert <literal>1/3</literal> entspricht z.B. der interne
+     Das gründet sich auf die Tatsache, dass es unmöglich ist, manche
+     Dezimal-Zahlen durch eine endliche Anzahl an Nachkomma-Stellen
+     darzustellen. Dem Wert <literal>1/3</literal> entspricht z.B. der interne
      Wert von <literal>0.3333333. . .</literal>.
     </para>
     <para>
      Deshalb sollten sie nie den Ergebnissen von Fließkomma-Operationen
-     bis auf die letzte Nachkomma-Stelle glauben oder solche auf
-     Gleichjeit prüfen. Sollten sie einen größere Genauigkeit brauchen,
-     sollten sie die <link linkend="ref.bc"> mathematischen Funktionen
-     beliebiger Genauigkeit </link> benutzen.
+     bis auf die letzte Nachkomma-Stelle trauen und nie solche auf
+     Gleichheit prüfen. Benötigen Sie wirklich eine größere Genauigkeit,
+     sollten sie die
+     <link linkend="ref.bc"> mathematischen Funktionen beliebiger Genauigkeit</link>
+     oder die <link linkend="ref.gmp">Gmp</link> Funktionen benutzen.
     </para>
    </warning>
   </sect1>
@@ -119,111 +502,230 @@
   <sect1 id="language.types.string">
    <title>Strings / Zeichenketten</title>
    <para>
-    Strings können durch eines der zwei folgenden Sets von
-    Begrenzungszeichen zugewiesen werden:
-   </para>
-   <para>
-    Wenn der String eingeschlossen wird von doppelten
-    Anführungszeichen ("), werden die Variablen innerhalb der
-    Zeichenkette ausgewertet (begrenzt durch einige Einschränkungen
-    beim "Parsen" (Ausführen) des PHP- Scripts). Wie in C und Perl
-    kann das Backslash-Zeichen ("\") zur An- / Ausgabe spezieller
-    Zeichen benutzt werden:
-    <table>
-     <title>Nicht ausgewertete / übergangene Zeichen:</title>
-     <tgroup cols="2">
-      <thead>
-       <row>
-       <entry>Zeichenfolge</entry>
-       <entry>Bedeutung</entry>
-       </row>
-      </thead>
-      <tbody>
-       <row>
-       <entry><literal>\n</literal></entry>
-       <entry>neue Zeile (LF oder 0x0A als ASCII-Code)</entry>
-       </row>
-       <row>
-       <entry><literal>\r</literal></entry>
-       <entry>Wagenrücklauf (CR oder 0x0D als ASCII-Code)</entry>
-       </row>
-       <row>
-       <entry><literal>\t</literal></entry>
-       <entry>horizontaler Tabulator (HT oder 0x09 als ASCII-Code</entry>
-       </row>
-       <row>
-       <entry><literal>\\</literal></entry>
-       <entry>Backslash / Rückstrich</entry>
-       </row>
-       <row>
-       <entry><literal>\$</literal></entry>
-       <entry>Dollar-Symbol</entry>
-       </row>
-       <row>
-       <entry><literal>\"</literal></entry>
-       <entry>doppelte Anführungszeichen</entry>
-       </row>
-       <row>
-       <entry><literal>\[0-7]{1,3}</literal></entry>
-       <entry>
-        die Zeichenfolge, die dem regulären Ausdruck entspricht, ist
-        in Oktal-Schreibweise
-       </entry>
-       </row>
-       <row>
-       <entry><literal>\x[0-9A-Fa-f]{1,2}</literal></entry>
-       <entry>
-        die Zeichenfolge, die dem regulären Ausdruck entspricht ist,
-        in Hexadezimal-Schreibweise
-       </entry>
-       </row>
-      </tbody>
-     </tgroup>
-    </table>
-   </para>
-   <para>
-    Sie können ein beliebiges anderes Zeichen übergehen bzw. von der
-    Auswertung ausschliessen; in der höchsten Warn-Stufe wird aber
-    eine Warnmeldung ausgegeben.
+    Ein <type>string</type> ist eine Folge von Zeichen. In PHP entspricht
+    ein Zeichen einem byte, das heißt, dass exakt 256 verschiedene Zeichen
+    möglich sind. Das impliziert auch, dass PHP keine native Unterstützung
+    für Unicode bietet.
    </para>
-   <para>
-    Die zweite Möglichkeit eine(n) Zeichenkette / String zu begrenzen,
-    ist der Gebrauch des einfachen Anführungszeichens ("'"), auch
-    Single-Quote genannt. Hier werden einzig die "\\" und
-    "\'"-Zeichenfolgen von der Auswertung ausgeschlossen. Dies dient
-    der Erleichterung, so dass sie Single-Quotes und Backslashes in
-    einem durch einfache Anführungszeichen begrenzten String benutzen
-    können. Variablen innerhalb von durch Single-Quotes begrenzten
-    Strings werden <emphasis>nicht</emphasis> ausgewertet.
-   </para>
-   <simpara>
-    Eine andere Möglichkeit Strings einzufassen, besteht im Gebrauch
-    der "here doc"-Syntax ("&lt;&lt;&lt;"). Hierfür ist nach
-    <literal>&lt;&lt;&lt;</literal> ein Merker zu setzen. Nun folgt
-    der eigentliche String und dann der selbe Merker um den String
-    abzuschliessen. Der schliessende Merker <emphasis>muss</emphasis>
-    in der ersten Spalte der Zeile stehen. 
-    Die verwendeten Bezeichner müssen den gleichen Regeln entsprechen
-    wie alle anderen PHP-Bezeichner auch. Sie dürfen lediglich aus
-    alphanumerischen Zeichen oder dem Unterstrich bestehen.
-   </simpara>
-   <para>
-    "Here doc"-Text funktioniert wie ein Text innnerhalb von '"', aber
-    ohne '"'. Anführungszeichen innerhalb von "here doc"-Texten müssen
-    also keiner Sonderbehandlung (escapen) unterzogen werden. Sie
-    können aber die obigen Escape-Anweisungen verwenden. Variablen
-    werden ausgewertet, aber besondere Aufmerksamkeit muss komplexen
-    Variablen gewidmet werden, genau wie Strings.
-    <example>
-     <title>
-      Beispiel zur String-Festlegung per "here doc"-Methode:
-     </title>
-     <programlisting role="php">
-&lt;?php
-$str = &lt;&lt;&lt;EOD
+   <note>
+    <simpara>
+     Für einen String stellt die Länge kein Problem dar. Von PHP-Seite aus
+     gibt es keine praktische Grenze für die Größe eines Strings. Daher gibt
+     es keinen Grund sich Sorgen über lange Strings zu machen.
+    </simpara>
+   </note>
+
+   <sect2 id="language.types.string.syntax">
+    <title>Syntax</title>
+    <para>
+     Ein String kann auf drei verschiedene Weisen geschrieben werden.
+
+     <itemizedlist>
+
+      <listitem>
+       <simpara>
+        <link linkend="language.types.string.syntax.single">Einfache 
+Anführungszeichen (single qouted)</link>
+       </simpara>
+      </listitem>
+
+      <listitem>
+       <simpara>
+        <link linkend="language.types.string.syntax.double">Doppelte 
+Anführungszeichen (double qouted)</link>
+       </simpara>
+      </listitem>
+
+      <listitem>
+       <simpara>
+        <link linkend="language.types.string.syntax.heredoc">Heredoc Syntax</link>
+       </simpara>
+      </listitem>
+
+     </itemizedlist>
+    </para>
+
+    <sect3 id="language.types.string.syntax.single">
+     <title>Einfache Anführungszeichen (Single qouted)</title>
+     <para>
+      Der leichteste Weg einen einfachen String zu schreiben, ist der
+      Einschluss in einfache Anführungszeichen
+      (das Zeichen <literal>'</literal>).
+     </para>
+     <para>
+      Um ein einfaches Anführungszeichen wörtlich auszugeben, muss dieses
+      mit einem Backslash (<literal>\</literal>) escaped werden, wie in
+      vielen anderen Programmiersprachen auch. Wenn Sie innerhalb eines
+      Strings einen Backslash vor einem einfachen Anführungszeichen oder am
+      Ende eines Strings ausgeben wollen, müssen Sie diesen verdoppeln.
+      Beachten Sie: wenn Sie versuchen irgendwelche anderen Zeichen zu
+      escapen, wird der Backslash ebenfalls ausgegeben! Daher besteht für
+      gewöhnlich keine Notwendigkeit den Backslash selbst zu escapen.
+      <note>
+       <simpara>
+        In PHP 3 wird eine Warnung auf der Stufe <literal>E_NOTICE</literal>
+        ausgegeben, wenn das passiert.
+       </simpara>
+      </note>
+      <note>
+       <simpara>
+        Anders als bei den zwei anderen Schreibweisen werden Variablen
+        innerhalb von single-quoted Strings
+        <emphasis>nicht</emphasis> ausgewertet.
+       </simpara>
+      </note>
+      <informalexample>
+       <programlisting role="php">
+<![CDATA[
+echo 'Das ist ein einfacher String';
+echo 'Sie können ebenso einen Zeilenumbruch einfügen,
+auf diese Art.';
+
+echo 'Arnold sagte einmal: "I\'ll be back"';
+// Ausgabe: ... "I'll be back"
+
+echo 'Sind Sie sicher, dass Sie C:\\*.* löschen wollen?';
+// Ausgabe: ... dass Sie C:\*.* löschen wollen?
+
+echo 'Sind Sie sicher, dass Sie C:\*.* löschen wollen?';
+// Ausgabe: ... dass Sie C:\*.* löschen wollen?
+
+echo 'Ich versuche einen Zeilenumbruch an diesem Punkt: \n ein Zeilenumbruch';
+// Ausgabe: ... diesem Punkt: \n ein Zeilenumbruch'
+
+$var = "nur zum Vergnügen";
+echo 'Das mache ich $var';
+// Ausgabe: Did this $var
+]]>
+       </programlisting>
+      </informalexample>
+     </para>
+    </sect3>
+
+    <sect3 id="language.types.string.syntax.double">
+     <title>Doppelte Anführungszeichen (Double quoted)</title>
+     <para>
+      Wenn ein String in doppelten Anführungszeichen (") eingeschlossen ist,
+      versteht PHP mehr Escape-Folgen für spezielle Zeichen:
+     </para>
+     <table>
+      <title>Nicht ausgewertete / übergangene Zeichen:</title>
+      <tgroup cols="2">
+       <thead>
+        <row>
+         <entry>Zeichenfolge</entry>
+         <entry>Bedeutung</entry>
+        </row>
+       </thead>
+       <tbody>
+        <row>
+         <entry><literal>\n</literal></entry>
+         <entry>Zeilenvorschub (LF oder 0x0A als ASCII-Code)</entry>
+        </row>
+        <row>
+         <entry><literal>\r</literal></entry>
+         <entry>Wagenrücklauf (CR oder 0x0D als ASCII-Code)</entry>
+        </row>
+        <row>
+         <entry><literal>\t</literal></entry>
+         <entry>horizontaler Tabulator (HT oder 0x09 als ASCII-Code</entry>
+        </row>
+        <row>
+         <entry><literal>\\</literal></entry>
+         <entry>Backslash / Rückstrich</entry>
+        </row>
+        <row>
+         <entry><literal>\$</literal></entry>
+         <entry>Dollar-Symbol</entry>
+        </row>
+        <row>
+         <entry><literal>\"</literal></entry>
+         <entry>doppelte Anführungszeichen</entry>
+        </row>
+        <row>
+         <entry><literal>\[0-7]{1,3}</literal></entry>
+         <entry>
+          die Zeichenfolge, die dem regulären Ausdruck entspricht
+          ist ein Zeichen in Oktal-Schreibweise
+         </entry>
+        </row>
+        <row>
+         <entry><literal>\x[0-9A-Fa-f]{1,2}</literal></entry>
+         <entry>
+          die Zeichenfolge, die dem regulären Ausdruck entspricht
+          ist ein Zeichen in Hexadezimal-Schreibweise
+         </entry>
+        </row>
+       </tbody>
+      </tgroup>
+     </table>
+     <para>
+      Noch einmal: wenn Sie versuchen, irgend ein anderes Zeichen zu escapen
+      wird der Backslash ebenfalls ausgegeben!
+     </para>
+     <para>
+      Der wichtigste Vorteil von double-qouted Strings ist die Tatsache,
+      dass Variablennamen ausgewertet werden. Für Details siehe
+      <link linkend="language.types.string.parsing">String Analyse (parsing)</link>
+     </para>
+    </sect3>
+
+    <sect3 id="language.types.string.syntax.heredoc">
+     <title>Heredoc</title>
+     <simpara>
+     Eine andere Möglichkeit Strings einzufassen, besteht im Gebrauch
+     der heredoc-Syntax ("&lt;&lt;&lt;"). Hierfür ist nach
+     <literal>&lt;&lt;&lt;</literal> ein Bezeichner zu setzen. Nun folgt
+     der eigentliche String und dann derselbe Bezeichner um den String
+     abzuschliessen.
+     </simpara>     
+     <simpara>
+      Der schliessende Bezeichner <emphasis>muss</emphasis>
+      in der ersten Spalte der Zeile stehen. Die verwendeten Bezeichner
+      müssen den gleichen Regeln entsprechen wie alle anderen PHP-Labels auch:
+      Sie dürfen lediglich alphanumerische Zeichen und den Unterstrich enthalten
+      und müssen mit einem Unterstrich oder einem Buchstaben beginnen.
+     </simpara>
+     
+     <warning>
+      <simpara>
+       Es ist sehr wichtig zu beachten, dass die Zeile mit dem schliessenden
+       Bezeichner keine anderen Zeichen enthält, ausgenommen
+       <emphasis>möglicherweise</emphasis> ein Semikolon
+       (<literal>;</literal>).
+       Das bedeuted im Besonderen, dass der Bezeichner
+       <emphasis>nicht eingerückt werden darf</emphasis> und es dürfen
+       keine Leerzeichen oder Tabulatoren vor oder nach dem Semikolon stehen.
+      </simpara>
+      <simpara>
+       Wahrscheinlich der unangenehmste Umstand ist der, dass ebenso kein
+       Wagenrücklauf (<literal>\r</literal>) am Ende dieser Zeile stehen darf,
+       nur ein Zeilenvorschub (<literal>\n</literal>).
+       Da Microsoft Windows die Folge <literal>\r\n</literal> als
+       Zeilenabschlusszeichen benutzt, kann Ihre heredoc-Syntax nicht
+       funktionieren, wenn Sie Ihr Skript mit einem Editor unter Windows
+       schreiben. Die meisten Programmier-Editoren bieten jedoch die
+       Möglichkeit, Ihre Dateien mit einem UNIX Zeilenende zu speichern.
+      </simpara>
+     </warning>
+
+     <para>
+      Heredoc-Text funktioniert wie ein String innnerhalb doppelter
+      Anführungszeichen, nur ohne doppelte Anführungszeichen.
+      Anführungszeichen innerhalb von heredoc-Texten müssen
+      also keiner Sonderbehandlung (escapen) unterzogen werden, aber Sie
+      können dennoch die oben aufgeführten Escape-Anweisungen verwenden.
+      Variablen werden ausgewertet, aber besondere Aufmerksamkeit muss komplexen
+      Variablen gewidmet werden, genau wie bei Strings.
+      <example> 
+       <title>
+        Beispiel zur String-Festlegung per "heredoc"-Methode:
+       </title>
+       <programlisting role="php">
+<![CDATA[
+<?php
+$str = <<<EOD
 Beispiel eines Strings
 über mehrere Script-Zeilen
-durch Gebrauch der here doc-Syntax.
+durch Gebrauch der heredoc-Syntax.
 EOD;
 
 /* komplexeres Beispiel, mit Variablen */
@@ -240,84 +742,242 @@
 $foo = new foo();
 $name = 'Mein Name';
 
-echo &lt;&lt;&lt;EOT
+echo <<<EOT
 Mein Name ist "$name". Ich schreibe einige $foo->foo.
 Nun schreibe ich gerade einige {$foo->bar[1]}.
 Dies sollte ein großes 'A' schreiben: \x41
 EOT;
 ?>
-     </programlisting>
-    </example>
-   </para>
-   <note>
-    <para>
-     Die "here-doc"-Unterstützung wurde in PHP 4 eingeführt.
-    </para>
-   </note>
-   <para>
-    Zeichenketten / Strings können mittels des '.'-Operators
-    miteinander verbunden werden. Beachten sie, dass hier der '+'
-    (Additions)-Operator nicht funktioniert. Bitte beachten sie auch
-    <link linkend="language.operators.string">String-Operatoren</link>
-    für weitergehende Informationen.  Zeichen in einem String können
-    wie ein numerisch-indiziertes Array von Zeichen benutzt
-    werden. Die Syntax ist der von C ähnlich.  Sehen sie hierzu die
-    folgenden Beispiele:
-   </para>
-   <para>
-    <example>
-     <title>Einige String-Beispiele</title>
-     <programlisting role="php">
-&lt;?php
-/* Zuweisung eines Strings. */
+]]>
+       </programlisting>
+      </example>
+     </para>
+  
+     <note>
+      <para>
+       Die heredoc Unterstützung wurde in PHP 4 eingeführt.
+      </para>
+     </note>
+    </sect3>
+
+    <sect3 id="language.types.string.parsing">
+     <title>Variablen-Analyse (parsing)</title>
+     <simpara>
+      Wird ein String in doppelten Anführungszeichen oder mit heredoc angegeben,
+      werden enthaltene Variablen ausgewertet (geparst).
+     </simpara>
+     <simpara>
+      Es gibt zwei Syntax-Typen, eine
+      <link linkend="language.types.string.parsing.simple">einfache</link>
+      und eine
+      <link linkend="language.types.string.parsing.complex">komplexe</link>.
+      Die einfache Syntax ist die geläufigste und bequemste. Sie bietet die
+      Möglichkeit eine Variable, einen Array-Wert, oder eine Objekt-Eigenschaft
+      auszuwerten (parsen).
+     </simpara>
+     <simpara>
+      Die komplexe Syntax wurde in PHP 4 eingeführt und ist an den
+      geschweiften Klammern <literal>{}</literal>erkennbar, die
+      den Ausdruck umschließen.
+     </simpara>
+     <sect4 id="language.types.string.parsing.simple">
+      <title>Einfache Syntax</title>
+      <simpara>
+       Sobald ein Dollarzeichen (<literal>$</literal>) auftaucht, wird
+       der Parser versuchen, gierig so viele Zeichen wie möglich zu nehmen,
+       um einen gültigen Variablennamen zu bilden. Schließen Sie Ihren
+       Varaiblennamen in geschweifte Klammern ein, wenn Sie ausdrücklich das
+       Ende des Namens angeben wollen.
+      </simpara>
+      <informalexample>
+       <programlisting role="php">
+<![CDATA[
+$beer = 'Heineken';
+echo "$beer's Geschmack ist großartig";  // funktioniert, "'" ist kein gültiges
+                                         // Zeichen für einen Variablennamen
+echo "Er hat einige $beers getrunken";   // funktioniert nicht, 's' ist ein gültiges
+                                         // Zeichen für einen Variablennamen
+echo "Er hat einige ${beer}s getrunken"; // funktioniert
+]]>
+       </programlisting>
+      </informalexample>
+      <simpara>
+       Auf ähnliche Weise können Sie erreichen, dass ein Array-Index
+       oder eine Objekt-Eigenschaft ausgewertet wird. Bei Array-Indizes
+       markiert die schließende eckige Klammer (<literal>]</literal>) das
+       Ende des Index. Für Objekt-Eigenschaften gelten die gleichen Regeln
+       wie bei einfachen Variablen, obwohl es bei Objekt-Eigenschaften keinen
+       Trick gibt, wie dies bei Variablen der Fall ist.
+      </simpara>
+      <informalexample>
+       <programlisting role="php">
+<![CDATA[
+$früchte = array( 'Erdbeere' => 'rot' , 'Banane' => 'gelb' );
+
+// Beachte: außerhalb von String-Anführungszeichen funktioniert das anders.
+echo "Eine Banane ist $früchte[Banane].";
+
+echo "Dieses Quadrat ist $quadrat->breite Meter breit.";
+
+// Funktioniert nicht. Für eine Lösung siehe die komplexe Syntax.
+echo "Dieses Quadrat ist $quadrat->breiteh00 Zentimeter breit.";
+
+]]>
+       </programlisting>
+      </informalexample>
+      <simpara>
+       Für irgendetwas Komplexeres sollten Sie die komplexe Syntax nutzen.
+      </simpara>
+     </sect4>
+     <sect4 id="language.types.string.parsing.complex">
+      <title>Komplexe (geschweifte) Syntax</title>
+      <simpara>
+       Diese wird nicht komplex genannt, weil etwa die Syntax komplex ist,
+       sondern weil Sie auf diesem Weg komplexe Ausdrücke einbeziehen können.
+     </simpara>
+     <simpara>
+      Tatsächlich können Sie jeden beliebigen Wert einbeziehen, der im
+      Namensbereich in Strings gültig ist. Schreiben Sie den Ausdruck einfach
+      auf die gleiche Art und Weise, wie außerhalb des Strings, und
+      umschließen diesen mit { und }. Da Sie '{' nicht escapen können, wird 
+      diese Syntax nur erkannt, wenn auf $ unmittelbar { folgt.
+      (Benutzen Sie "{\$" oder "\{$" um ein wörtliches "{$" zu erhalten.)
+      Einige Beispiele, um dies zu verdeutlichen:
+     </simpara>
+     <informalexample>
+      <programlisting role="php">
+<![CDATA[
+$great = 'fantastisch';
+echo "Das ist { $great}"; // funktioniert nicht, Ausgabe: Das ist { fantastisch}
+echo "Das ist {$great}";  // funktioniert, Ausgabe: Das ist fantastisch
+echo "Dieses Quadrat ist {$square->width}00 Zentimeter breit."; 
+echo "Das funktioniert: {$arr[4][3]}";
+
+// Das ist aus dem gleichen Grund falsch
+// wie $foo[bar] außerhalb eines Strings falsch ist.
+echo "Das ist falsch: {$arr[foo][3]}";
+
+echo "So sollten Sie es machen: {$arr['foo'][3]}";
+echo "Sie können sogar schreiben {$obj->values[3]->name}";
+echo "Das ist der Wert der Variable mit Namen $name: {${$name}}";
+]]>
+       </programlisting>
+      </informalexample>
+     </sect4>
+    </sect3>
+    
+    <sect3 id="language.types.string.substr">
+     <title>String Zugriff auf Zeichen</title>
+     <para>
+      Auf Zeichen innerhalb von Strings kann durch die Angabe des
+      Null-basierten Offsets des gewünschten Zeichens, in geschweiften
+      Klammern nach dem String, zugegriffen werden.
+     </para>
+     <note>
+      <simpara>
+       Für Abwärtskompatibilität können Sie immer noch die Array-Klammern verwenden.
+       Diese Syntax wird jedoch seit PHP 4 missbilligt.
+      </simpara>
+     </note>
+     <para>
+      <example>
+       <title>Einige String-Beispiele</title>
+       <programlisting role="php">
+<![CDATA[
+<?php
+// Zuweisung eines Strings.
 $str = "Dies ist eine Zeichenkette";
 
-/* Erweiterung dieses Strings. */
+// Erweiterung dieses Strings.
 $str = $str . " mit etwas zusätzlichem Text";
 
-/* andere Möglichkeit zum Erweitern incl. Anweisung für Neue-Zeile. */
+// andere Möglichkeit zum Erweitern incl. Anweisung für Neue-Zeile.
 $str .= " und einer neuen Zeile am Ende.\n";
 
-/* Dieser String wird am Ende zu: '&lt;p&gt;Nummer: 9&lt;/p&gt;' */
+/* 
+Nach diesen drei Operationen enthält $str:
+"Dies ist eine Zeichenkette mit etwas zusätzlichem Text und einer neuen Zeile am 
+Ende.\n."
+*/
+
+// Dieser String wird am Ende zu: '<p>Nummer: 9</p>'
 $num = 9;
-$str = "&lt;p&gt;Nummer: $num&lt;/p&gt;";
+$str = "<p>Nummer: $num</p>";
 
-/* Dieser wird zu '&lt;p&gt;Nummer: $num&lt;/p&gt;' */
+// Dieser wird zu '<p>Nummer: $num</p>'
 $num = 9;
-$str = '&lt;p&gt;Nummer: $num&lt;/p&gt;';
-?&gt;    
+$str = '<p>Nummer: $num</p>';
 
-/* Das erste Zeichen eines Strings */
+// Das erste Zeichen eines Strings.
 $str = 'Das ist ein Test.'
-$first = $str[0];
+$first = $str{0};                // $first enthält "D"
 
-/* Das letzte Zeichen eines Strings */
+// Das letzte Zeichen eines Strings.
 $str = 'Das ist immer noch ein Test.'
-$last = $str[strlen($str)-1];
-?&gt;
-     </programlisting>
-    </example>
-   </para>
+$last = $str{strlen($str)-1};    // $last enthält "."
+?>
+]]>
+       </programlisting>
+      </example>
+     </para>
+    </sect3>
+
+   </sect2><!-- end syntax -->
+
+   <sect2 id="language.types.string.useful-funcs">
+    <title>Nützliche Funktionen</title><!-- and operators -->
+    <para>
+     Zeichenketten / Strings können mittels des '.'(dot)-Operators
+     miteinander verbunden werden. Beachten Sie, dass hier der '+'
+     (Additions)-Operator nicht funktioniert. Für mehr Informationen
+     schauen Sie bitte unter den
+     <link linkend="language.operators.string">Zeichenketten-Operatoren</link>
+     nach.
+    </para>
+    <para>
+     Es gibt eine Menge nützlicher Funktionen zur String-Manipulation.
+    </para>
+    <simpara>
+     Für allgemeine Funktionen schauen Sie sich den Abschnitt über
+     <link linkend="ref.strings">String Funktionen</link> an,
+     und für fortgeschrittenes Suchen &amp; Ersetzen die Funktionen zu
+     Regulären Ausdrücken (in zwei Ausführungen: 
+     <link linkend="ref.pcre">Perl Kompatibel</link> and 
+     <link linkend="ref.regex">POSIX erweitert</link>).
+    </simpara>
+    <simpara>
+     Weiterhin gibt es auch noch
+     <link linkend="ref.url">Funktionen für URL-Strings</link>,
+     und Funktionen zum Verschlüsseln/Entschlüsseln von Strings
+     (<link linkend="ref.mcrypt">mcrypt</link> und 
+     <link linkend="ref.mhash">mhash</link>).
+    </simpara>
+    <simpara>
+     Schließlich, falls Sie immer noch nicht das gefunden haben wonach
+     Sie suchen, schauen Sie unter den 
+     <link linkend="ref.ctype">Zeichen-Typen Funktionen</link> nach.
+    </simpara>
+   </sect2>
 
    <sect2 id="language.types.string.conversion">
     <title>Umwandlung von Zeichenketten / Strings</title>
+
     <simpara>
-     Sobald ein String als Zahlenwert angesehen wird, wird der
-     resultierende Wert und Typ wie folgt festgelegt:
+     Sobald ein String als numerischer Wert ausgewertet wird, wird der
+     resultierende Wert und Typ wie folgt festgelegt.
     </simpara>
     <simpara>
-     Der String wird als double angesehen, wenn er eines der Zeichen
-     '.', 'e', oder 'E' enthält. Ansonsten wird er als Integer-Wert
+     Der String wird als <type>float</type> ausgewertet, wenn er eines der
+     Zeichen '.', 'e', oder 'E' enthält. Ansonsten wird er als Integer-Wert
      interpretiert.
     </simpara>
     <para>
-     Der Inhalt wird durch den Anfangsteil des Strings vorgegeben.
-     Sofern der String mit numerischen Daten beginnt, wird ein
-     Zahlen-Wert angenommen. Andererseits kann der Wert auch 0 (&null;)
-     sein. Gültig sind auch Werte mit einem optionalen Vorzeichen,
+     Der Wert wird durch den Anfangsteil des Strings bestimmt.
+     Sofern der String mit gültigen numerischen Daten beginnt, werden diese
+     als Wert benutzt. Andernfalls wird der Wert 0 (Null)
+     sein. Gültige numerische Daten sind ein optionales Vorzeichen,
      gefolgt von einer oder mehreren Zahlen (optional mit einem
      Dezimalpunkt). Wahlweise kann auch ein Exponent angegeben
-     werden. Dieser besteht aus einem 'e' oder 'E', gefolgt von einer
+     werden. Der Exponent besteht aus einem 'e' oder 'E', gefolgt von einer
      oder meheren Zahlen.
     </para>
     <simpara>
@@ -326,201 +986,483 @@
     </simpara>
     <informalexample>
      <programlisting role="php">
-$foo = 1 + "10.5";              // $foo ist double (11.5)
-$foo = 1 + "-1.3e3";            // $foo ist double (-1299)
-$foo = 1 + "bob-1.3e3";         // $foo ist ein Integer-Wert (1)
-$foo = 1 + "bob3";              // $foo ist ein Integer-Wert (1)
-$foo = 1 + "10 Small Pigs";     // $foo ist ein Integer-Wert (11)
-$foo = 1 + "10 Little Piggies"; // $foo ist ein Integer-Wert (11)
-$foo = "10.0 pigs " + 1;        // $foo ist ein Integer-Wert (11)
-$foo = "10.0 pigs " + 1.0;      // $foo ist double (11)     
+<![CDATA[
+$foo = 1 + "10.5";               // $foo ist float   (11.5)
+$foo = 1 + "-1.3e3";             // $foo ist float   (-1299)
+$foo = 1 + "bob-1.3e3";          // $foo ist integer (1)
+$foo = 1 + "bob3";               // $foo ist integer (1)
+$foo = 1 + "10 Kleine Schweine"; // $foo ist integer (11)
+$foo = 1 + "10 Ferkel";          // $foo ist integer (11)
+$foo = "10 Schweine " + 1;       // $foo ist integer (11)
+$foo = "10.0 Schweine " + "1";   // $foo ist float   (11)
+$foo = "10 Schweine " + 1.0;     // $foo ist float   (11)
+]]>
      </programlisting>
     </informalexample>
     <simpara>
-     Mehr Informationen über solche Umwandlungen können sie im
-     UNIX-Manual unter strtod(3) finden.
+     Weitere Informationen über solche Umwandlungen finden Sie in
+     den UNIX Manualseiten unter strtod(3).
     </simpara>
     <para>
-     Wenn sie alle Beispiele dieses Abschnitts testen wollen, können
-     sie sie per Cut und Paste in ihr Script übertragen und mit der
-     folgenden Zeile selbst sehen, was passiert:
+     Wenn Sie irgendein Beispiel dieses Abschnitts testen wollen, können Sie
+     dieses per "Copy und Paste" übernehmen. Fügen Sie die folgende Zeile 
+     Ihrem Skript hinzu und Sie sehen selbst was passiert: 
      <informalexample>
       <programlisting role="php">
-echo "\$foo==$foo; Typ ist " . gettype( $foo ) . "&lt;br&gt;\n";
+<![CDATA[
+echo "\$foo==$foo; Typ ist " . gettype ($foo) . "<br>\n";
+]]>
       </programlisting>
      </informalexample>
     </para>
+
    </sect2>
-  </sect1>
-  
+  </sect1><!-- end string -->
+
   <sect1 id="language.types.array">
    <title>Arrays</title>
+
+   <para>
+    Ein Array in PHP ist eigentlich eine geordnete Abbildung. Eine Abbildung
+    ist ein Typ der <emphasis>Werte</emphasis> auf 
+    <emphasis>Schlüssel</emphasis> abbildet. Dieser Typ ist auf mehrere Arten
+    optimiert, so dass Sie ihn auf vershiedene Weise benutzen können:
+    als reales Array, als Liste (Vektor), als Hash-Tabelle (das ist eine
+    praktische Anwendung einer Abbildung), als Verzeichnis, als Sammlung,
+    als Stapel (Stack), als Warteschlange (Queue) und möglicherweise mehr.
+    Da Sie ein weiteres PHP-Array als Wert benutzen können, ist es ziemlich
+    einfach möglich Baumstrukturen zu simulieren.
+   </para>
    <para>
-    Arrays reagieren wie Hash-Tabellen (assoziative Arrays) und
-    indizierte Arrays (Vektoren).
+    Die Erklärung dieser Strukturen würde den Rahmen dieses Handbuchs
+    sprengen, aber Sie finden zumindest ein Beispiel für jede dieser
+    Strukturen. Für weitergehende Informationen verweisen wir auf externe
+    Literatur zu diesem breit gefächerten Thema.
    </para>
 
-   <sect2 id="language.types.array.single-dim">
-    <title>Eindimensionale Arrays</title>
-    <para>
-     PHP unterstützt sowohl skalare als auch assoziative Arrays.
-     Letztendlich gibt es keinen Unterschied zwischen den beiden.  Sie
-     können ein Array erzeugen, indem sie die
-     <function>list</function> oder <function>array</function>
-     Funktionen benutzen, oder sie können explizit den Wert eines
-     jeden Array-Elements festlegen.
-     <informalexample>
-      <programlisting role="php"> 
-$a[0] = "abc"; 
-$a[1] = "def"; 
-$b["foo"] = 13;
-      </programlisting>
-     </informalexample>
-    </para>
-    <para>
-     Sie können ein Array auch erzeugen, indem sie einfach Werte einem
-     Array hinzu fügen. Wenn sie einer Array-Variablen einen Wert
-     weisen, indem sie leere Klammern benutzen, wird der Wert am Ende
-     des Arrays hinzugefügt.
-     <informalexample>
-      <programlisting role="php"> 
-$a[] = "hello"; // $a[2] == "hello"
-$a[] = "world"; // $a[3] == "world" 
+   <sect2 id="language.types.array.syntax">
+    <title>Syntax</title>
+
+    <sect3 id="language.types.array.syntax.array-func">
+     <title>Angabe mit <function>array</function></title>
+     <para>
+      Ein <type>array</type> kann mit Hilfe des Sparchkonstrukts
+      <function>array</function> erzeugt werden. Es benötigt eine bestimmte
+      Anzahl von Komma-getrennten
+      <literal><replaceable>Schlüssel</replaceable> =&gt; <replaceable>Wert
+      </replaceable></literal> Paaren.
+     </para>
+     <para>
+      Ein <varname>Schlüssel</varname> ist entweder eine nicht-negative
+      Zahl vom Typ <type>integer</type> oder ein <type>string</type>.
+      Wenn ein Schlüssel die Standard-Darstellung einer nicht-negativen
+      <type>integer</type> Zahl ist, wird es als solche interpretiert werden,
+      (z.B. <literal>'8'</literal> wird als <literal>8</literal> interpretiert
+      während <literal>'08'</literal> als <literal>'08'</literal>
+      interpretiert werden wird).
+     </para>
+     <para>
+      Ein Wert kann irgendetwas sein.
+     </para>
+     <formalpara id="language.types.array.omit-key">
+      <title>Weglassen von Schlüsseln</title>
+      <para>
+       Falls Sie einen Schlüssel weglassen, wird das Maximum der Integer-
+       Indizes gennnommen und der neue Schlüssel wird dieses Maximum + 1 sein.
+       Falls es bis dahin keine Integer-Indizes gibt, wird der Schlüssel zu
+       <literal>0</literal> (Null). Falls Sie einen Schlüssel angeben dem 
+       schon ein Wert zugeordnet wurde, wird dieser Wert überschrieben.
+      </para>
+     </formalpara>
+
+     <para>
+      <synopsis>
+array( <optional> <replaceable>Schlüssel</replaceable> =&gt; </optional> <replaceable
+>Wert</replaceable>
+     , ...
+     )
+// <replaceable>Schlüssel</replaceable> ist entweder ein <type>string</type
+                        > oder ein nicht-negativer <type>integer</type>
+// <replaceable>Wert</replaceable> kann irgendetwas sein.
+      </synopsis>
+     </para>
+    </sect3>
+
+    <sect3 id="language.types.array.syntax.modifying">
+     <title>Erzeugen / Verändern mit der eckigen Klammer-Syntax</title>
+     <para>
+      Sie können ein bestehendes Array durch explizites Zuweisen von Werten
+      verändern.
+     </para>
+     <para>
+      Weisen Sie dem Array Werte zu indem Sie den Schlüssel in eckigen
+      Klammern angeben. Sie können den Schlüssel auch weglassen. In diesem
+      Fall schreiben Sie einfach ein leeres Klammerpaar
+      ("<literal>[]</literal>") hinter den Variablennamen.
+      <synopsis>
+$arr[<replaceable>Schlüssel</replaceable>] = <replaceable>Wert</replaceable>;
+$arr[] = <replaceable>Wert</replaceable>;
+// <replaceable>Schlüssel</replaceable> ist entweder ein <type>string</type
+                        > oder ein nicht-negativer <type>integer</type>
+// <replaceable>Wert</replaceable> kann irgendetwas sein.
+      </synopsis>
+      Falls <varname>$arr</varname> bis dahin nicht existiert, wird es
+      erzeugt. Das ist also eine alternative Syntax um ein Array zu erzeugen.
+      Um einen bestimmten Wert zu ändern, weisen Sie diesem einfach einen
+      neuen Wert zu. Wenn Sie ein Schlüssel/Wert Paar entfernen möchten,
+      benutzen Sie <function>unset</function>.
+      
+     </para>
+
+    </sect3>
+    
+
+   </sect2><!-- end syntax -->
+
+
+   <sect2 id="language.types.array.useful-funcs">
+    <title>Nützliche Funktionen</title>
+    <para>
+     Es gibt viele nützliche Funktionen um mit Arrays zu arbeiten.
+     Schauen Sie unter dem Abschnitt
+     <link linkend="ref.array">Array Funktionen</link> nach.
+    </para>
+    <note>
+     <para>
+      Mit <function>unset</function> können Sie Schlüssel eines Arrays
+      löschen. Halten Sie sich vor Augen, dass das Array NICHT neu indiziert
+      wird.
+      <informalexample>
+       <programlisting role="php">
+<![CDATA[
+$a = array( 1 => 'eins', 2 => 'zwei', 3 => 'drei' );
+unset( $a[2] );
+
+/* erzeugt ein Array das wie folgt definiert worden wäre:
+   $a = array( 1=>'eins', 3=>'drei');
+   und NICHT
+   $a = array( 1 => 'eins', 2 => 'drei');
+*/
+]]>
       </programlisting>
      </informalexample>
+     
+     </para>    
+    </note> 
+    <para>
+     Die <link linkend="control-structures.foreach">foreach</link> 
+     Kontrollstruktur gibt es speziell für Arrays. Damit ist es leicht
+     ein Array zu durchlaufen.
     </para>
+    
+    
+   </sect2>
+
+   <sect2 id="language.types.array.donts">
+    <title>Array do's und don'ts</title>
+
+    <sect3 id="language.types.array.foo-bar">
+     <title>Warum ist <literal>$foo[bar]</literal> falsch?</title>
+     <para>
+      Vieleicht kennen Sie folgende Syntax aus alten Skripts:
+      <informalexample>
+       <programlisting role="php">
+<![CDATA[
+$foo[bar] = 'Feind';
+echo $foo[bar];
+// usw
+]]>
+       </programlisting>
+      </informalexample>
+      Es ist falsch, funktioniert aber. Warum ist es dann falsch?
+      Der Grund ist folgender: Wie im Abschnitt
+      <link linkend="language.types.array.syntax">syntax</link> ausgeführt,
+      muss zwischen den eckigen Klammern
+      ('<literal>[</literal>' und '<literal>]</literal>')ein Ausdruck stehen.
+      Das heißt, dass Sie Dinge ähnlich diesen schreiben können:
+      <informalexample>
+       <programlisting role="php">
+<![CDATA[
+echo $arr[ foo(true) ];        
+]]>
+       </programlisting>
+      </informalexample>
+      Das ist ein Beispiel dafür, wie Sie den Rückgabewert einer Funktion als
+      Array-Index verwenden können. Ebenso kennt PHP Konstanten, vielleicht
+      haben Sie die <literal>E_*</literal> Konstanten schon einmal gesehen.
+      <informalexample>
+       <programlisting role="php">
+<![CDATA[
+$error_descriptions[E_ERROR]   = "Ein schwerwiegender Fehler ist aufgetreten";
+$error_descriptions[E_WARNING] = "PHP hat eine Warnung ausgegeben";
+$error_descriptions[E_NOTICE]  = "Das ist nur eine informelle Notiz";
+]]>
+       </programlisting>
+      </informalexample>
+      Beachten Sie, dass <literal>E_ERROR</literal> ebenso ein gültiger
+      Bezeichner ist, genau wie <literal>bar</literal> im ersten Beispiel.
+      Das letzte Beispiel entspricht aber tatsächlich dem folgendem Code:
+      <informalexample>
+       <programlisting role="php">
+<![CDATA[
+$error_descriptions[1] = "Ein schwerwiegender Fehler ist aufgetreten";
+$error_descriptions[2] = "PHP hat eine Warnung ausgegeben";
+$error_descriptions[8] = "Das ist nur eine informelle Notiz";
+]]>
+       </programlisting>
+      </informalexample>
+      weil <literal>E_ERROR</literal> gleich <literal>1</literal> ist, usw.
+     </para>
+     <para>
+      Aber wie ist es dann möglich dass <literal>$foo[bar]</literal>
+      funktioniert? Es funktioniert, weil <literal>bar</literal> aufgrund
+      seiner Syntax als Konstante ausgewertet wird. In diesem Fall jedoch
+      existiert keine Konstane mit dem Namen <literal>bar</literal>. PHP
+      nimmt an, dass Sie <literal>bar</literal> wörtlich gemeint haben, wie
+      den String <literal>'bar'</literal>, Sie aber vergessen haben die 
+      Anführungszeichen zu setzen
+     </para>
+    </sect3>
+     <sect3 id="language.types.array.foo-bar.bad">
+      <title>Aber warum ist es schlecht?</title>
+      <para>
+       Eines Tages könnte sich das PHP Team entscheiden eine weitere
+       Konstante oder ein Schlüsselwort hinzuzufügen und dann geraten Sie in
+       Schwierigkeiten. Zum Beispiel können Sie bereits die Wörter
+       <literal>empty</literal> und <literal>default</literal> auf diese Art
+       nicht benutzen, weil es speziele Schlüsselwörter sind.
+      </para>
+      <para>
+       Und, falls diese Argumente nicht ausreichen: diese Syntax ist schlicht
+       veraltet und könnte irgendwann nicht mehr funktionieren.
+      </para>
+      <tip>
+       <simpara>
+        Wenn Sie
+        <link linkend="function.error-reporting">error_reporting</link>
+        auf <literal>E_ALL</literal> setzen, werden sie bemerken, dass PHP
+        jedesmal eine Warnung ausgibt, wenn Sie dieses Konstrukt benutzen.
+        Das gilt ebenso für andere veraltete 'Features'.
+        (Fügen Sie die Zeile <literal>error_reporting(E_ALL);</literal>
+        in Ihr Skript ein.)
+       </simpara>
+      </tip>
+      <note>
+       <simpara>
+        Innerhalb eines <type>string</type> in doppelten Anführunfszeichen
+        gilt eine andere Syntax. Für mehr Details schauen Sie unter
+        <link linkend="language.types.string.parsing">
+        Variablen-Analyse in Strings</link> nach.
+       </simpara>
+      </note>
+     </sect3>
+   </sect2>
+
+   <sect2 id="language.types.array.examples">
+    <title>Beispiele</title>
     <para>
-     Arrays können durch Gebrauch der <function>asort</function>,
-     <function>arsort</function>, <function>ksort</function>,
-     <function>rsort</function>, <function>sort</function>,
-     <function>uasort</function>, <function>usort</function>, und
-     <function>uksort</function>-Funktionen sortiert werden (in
-     Abhängigkeit von der gewünschten Sortierung).
-    </para>
-    <para>
-     Sie können die Anzahl der Elemente eines Arrays mittels der
-     <function>count</function>-Funktion ermitteln.
+     Der Array-Typ in PHP ist sehr vielseitig. Hier folgen einige Beispiele
+     um Ihnen die Mächtigkeit von Arrays zu veranschaulichen.
     </para>
     <para>
-     Durchlaufen können sie ein Array per <function>next</function>
-     und <function>prev</function>-Funktion. Eine weiter Möglichkeit
-     ist die Funktion <function>each</function>.
-    </para>
-   </sect2>
+      <informalexample>
+       <programlisting role="php">
+<![CDATA[
+// Das hier
+$a = array('Farbe'     => 'rot'
+          ,'Geschmack' => 'süß'
+          ,'Form'      => 'rund'
+          ,'Name'      => 'Apfel'
+          ,4                  // Schlüssel ist 0
+          );
+
+// ist komplett gleichwertig mit
+$a['Farbe']     = 'rot';
+$a['Geschmack'] = 'süß';
+$a['Form']      = 'rund';
+$a['Name']      = 'Apfel';
+$a[]            = 4;          // Schlüssel ist 0
+
+$b[] = 'a';
+$b[] = 'b';
+$b[] = 'c';
+// ergibt das Array: array( 0 => 'a' , 1 => 'b' , 2 => 'c' ),
+// oder einfacher: array('a', 'b', 'c')
+]]>
+       </programlisting>
+      </informalexample>
+     </para>
+    
+    <example>
+     <title>Verwenden von <function>array</function></title>
+     <programlisting role="php">
+<![CDATA[
+// Array als (Eigenschafts-)Abbildung
+$map = array('version'    => 4
+            ,'OS'         => 'Linux'
+            ,'Sprache'    => 'englisch'
+            ,'short_tags' => true
+            );
+            
+// strikt numerische Schlüssel
+$array = array(7
+              ,8
+              ,0
+              ,156
+              ,-10
+              );
+// Dies entspricht: array( 0 => 7, 1 => 8, ...)
+
+// wechselnde Schlüssel
+$wechselnd = array(10          // Schlüssel: 0
+                  ,5    =>  6
+                  ,3    =>  7
+                  ,'a'  =>  4
+                  ,11          // Schlüssel: 6 (Maximum der Integer-Indices war 5)
+                  ,'8'  =>  2  // Schlüssel: 8 (integer!)
+                  ,'02' => 77  // Schlüssel: '02'
+                  ,0    => 12  // 10 wird mit dem neuen Wert 12 überschrieben
+                  );
+                  
+// leeres Array
+$leer = array();         
+]]>
+     </programlisting>
+    </example>
 
-   <sect2 id="language.types.array.multi-dim">
-    <title>Mehrdimensionale Arrays</title>
-    <para>
-     Mehrdimensionale Arrays sind einfach. Für jede Dimension des
-     Arrays fügen sie einen anderen [key]-Wert ans Ende an:
-     <informalexample>
-      <programlisting role="php"> 
-$a[1]      = $f;               # Ein-Dimensionales Beispiel
-$a["foo"]  = $f;   
-
-$a[1][0]     = $f;             # Zwei-Dimensional
-$a["foo"][2] = $f;             # (sie können numerische und
-                                  assoziative Indizes so mischen)
-$a[3]["bar"] = $f;             # (oder so)
+    <example id="language.types.array.examples.loop">
+     <title>Sammlung</title>
+     <programlisting role="php">
+<![CDATA[
+$farben = array('rot','blau','grün','gelb');
 
-$a["foo"][4]["bar"][0] = $f;   # Vier-Dimensional!
-      </programlisting>
-     </informalexample>
-    </para>
+foreach ($farben as $farbe) {
+    echo "Gefällt Ihnen $farbe?\n";
+}
+
+/* Ausgabe:
+Gefällt Ihnen rot?
+Gefällt Ihnen blau?
+Gefällt Ihnen grün?
+Gefällt Ihnen gelb?
+*/
+]]>
+     </programlisting>
+    </example>
+    
     <para>
-     In PHP ist es nicht möglich, mehrdimensionale Arrays direkt in
-     Strings zu referenzieren. Deshalb erzeugt auch das nachfolgende
-     Beispiel nicht das gewünschte Ergebnis:
-     <informalexample>
-      <programlisting role="php"> 
-$a[3]['bar'] = 'Bob';
-echo "Dies funktioniert nicht: $a[3][bar]";
-      </programlisting>
-     </informalexample>
-     In PHP wird das o.a. Beispiel folgendes ausgeben:
-     <computeroutput>Dies funktioniert nicht: Array[bar]
-     </computeroutput>. Jedoch kann der String-Verbindungs-Operator
-     benutzt werden, dies zu umgehen:
-     <informalexample>
+     Beachten Sie, dass es gegenwärtig nicht möglich ist die Werte eines
+     Arrays direkt in einer solchen Schleife zu ändern.
+     Eine Lösung ist folgendes: 
+     <example id="language.types.array.examples.changeloop">
+      <title>Sammlung</title>
       <programlisting role="php">
-$a[3]['bar'] = 'Bob';
-echo "Das funktioniert: " . $a[3][bar];
+<![CDATA[
+foreach ($farben as $key => $farbe) {
+    // funktioniert nicht:
+    //$farbe = strtoupper($farbe);
+    
+    //funktioniert:
+    $farben[$key] = strtoupper($farbe);
+}
+print_r($farben);
+
+/* Ausgabe:
+Array
+(
+    [0] => ROT
+    [1] => BLAU
+    [2] => GRÜN
+    [3] => GELB
+)
+*/
+]]>
       </programlisting>
-     </informalexample>
+     </example>
     </para>
     <para>
-     In PHP4 kann das Problem umgangen werden, indem die
-     Array-Referenz in geschweiften Klammern eingeschlossen wird:
-     <informalexample>
+     Dieses Beispiel erzeugt ein Array, dessen Schlüssel bei eins beginnt.
+     <example>
+      <title>1-basierter Index</title>
       <programlisting role="php">
-$a[3]['bar'] = 'Bob';
-echo "Das funktioniert in PHP4: {$a[3][bar]}";
+<![CDATA[
+$erstes_viertel  = array(1 => 'Januar', 'Februar', 'März');
+print_r($erstes_viertel);
+
+/* Ausgabe:
+Array 
+(
+    [1] => 'Januar'
+    [2] => 'Februar'
+    [3] => 'März'
+)
+*/
+]]>   
       </programlisting>
-     </informalexample>
+     </example>
     </para>
+    <example>
+     <title>Füllen eines realen Arrays</title>
+     <programlisting role="php">
+<![CDATA[
+// Füllen eines Arrays mit allen Inhalten eines Verzeichnisses
+$handle = opendir('.');
+while ($file = readdir($handle)) 
+{
+    $files[] = $file;
+}
+closedir($handle); 
+]]>
+     </programlisting>
+    </example>
     <para>
-     Man kann multi-dimensionale Arrays auf viele Arten füllen, aber
-     der trickreichste Weg geht über das Verständnis, wie der
-     <function>array</function>-Befehl für assoziative Arrays zu
-     benutzen ist.  Die folgenden Code-Schnippsel füllen das
-     ein-dimensionale Array über den gleichen Weg:
-     <informalexample>
-      <programlisting role="php"> 
-# Example 1:
-
-$a["color"]    = "red";
-$a["taste"]    = "sweet";
-$a["shape"]    = "round";
-$a["name"]     = "apple";
-$a[3]          = 4;
-
-
-# Example 2:
-$a = array(
-"color" => "red",
-"taste" => "sweet",
-"shape" => "round",
-"name"  => "apple",
-3       => 4
-);
-      </programlisting>
-     </informalexample>
+     Arrays sind geordnet. Diese Ordnung können Sie mit Hilfe verschiedener
+     Sortierfunktionen verändern. Für mehr Informationen schauen Sie unter
+     dem Abschnitt zu den <link linkend="ref.array">Array Funktionen</link>
+     nach.
     </para>
+    <example>
+     <title>Sortien eines Array</title>
+     <programlisting role="php">
+<![CDATA[
+sort($files);
+print_r($files);
+]]>
+     </programlisting>
+    </example>
     <para>
-     Die <function>array</function>-Funktion kann eingefügt
-     werden für mehrdimensionale Arrays:
-     <informalexample>
-      <programlisting role="php"> 
-&lt;?php
-$a = array(
-    "apple"  => array(
-        "color"  => "red",
-        "taste"  => "sweet",
-        "shape"  => "round"
-    ),
-    "orange"  => array(
-        "color"  => "orange",
-        "taste"  => "tart",
-        "shape"  => "round"
-    ),
-    "banana"  => array(
-        "color"  => "yellow",
-        "taste"  => "paste-y",
-        "shape"  => "banana-shaped"
-    )
-);
-  
-echo $a["apple"]["taste"];    # dies wird "sweet" ausgegeben
-?>
-      </programlisting>
-     </informalexample>
+     Weil der Wert eines Arrays irgendetwas sein kann, kann dieser Wert
+     wiederum ein Array sein. Somit können Sie rekursive und multidimensionale
+     Arrays erzeugen.
     </para>
-
+    <example>
+     <title>Rekursive and multidimensionale Arrays</title>
+     <programlisting role="php">
+<![CDATA[
+$fruits = array ( "früchte"  => array("a" => "Orange"
+                                     ,"b" => "Banane"
+                                     ,"c" => "Apfel"
+                                     )
+                , "nummern"  => array(1
+                                     ,2
+                                     ,3
+                                     ,4
+                                     ,5
+                                     ,6
+                                     )
+                , "löcher"   => array("erstens"
+                                     ,5 => "zweitens"
+                                     ,"drittens"
+                                     )
+                );
+]]>
+     </programlisting>
+    </example>
    </sect2>
   </sect1>
 
   <sect1 id="language.types.object">
-   <title>Objects</title>
+   <title>Objekte</title>
 
    <sect2 id="language.types.object.init">
     <title>Objekt-Initialisierung</title>
@@ -531,7 +1473,8 @@
      Variablen-Instanz zugewiesen.
      <informalexample>
       <programlisting role="php">
-&lt;?php
+<![CDATA[
+<?php
 class foo {
     function do_foo () { 
         echo "Doing foo."; 
@@ -541,77 +1484,140 @@
 $bar = new foo;
 $bar->do_foo ();
 ?>
+]]>
       </programlisting>
      </informalexample>
     </para>
     <simpara>
-     Für eine ausführliche Besprechung lesen Sie im Kapitel <link
-     linkend="language.oop">Klassen und Objekte</link> nach.
+     Für eine ausführliche Besprechung lesen Sie das Kapitel
+     <link linkend="language.oop">Klassen und Objekte</link>
     </simpara>
    </sect2>
   </sect1>
 
+  <sect1 id="language.types.resource">
+   <title>Resource</title>
+    
+    <para>
+     Eine Resource ist eine spezielle Variable, die eine Referenz auf eine
+     externe Resource enthält. Resourcen werden von bestimmten Funktionen
+     erzeugt und benutzt. Eine Liste dieser Funktionen und der entsprechenden
+     Resource-Typen finden Sie im <link linkend="resource">Anhang</link>.
+    </para>
+    
+    <note>
+     <simpara>
+      Der Resource-Typ wurde in PHP 4 eingeführt.4
+     </simpara>
+    </note>
+
+    <sect2 id="language.types.resource.self-destruct">
+     <title>Freigabe von Resourcen</title>
+    
+    <para>
+     Aufgrund des Reference-Counting Systems, das mit PHP 4's Zend-Egine
+     eingeführt wurde, wird automatisch entdeckt, wenn auf eine Resource
+     nicht mehr zugegriffen wird (wie in Java). Wenn dies der Fall ist
+     werden alle Resourcen, die für diese Resource in Gebrauch waren, durch
+     den "Müllsammler" (garbage collector) freigegeben. Aus diesem Grund ist
+     es selten jemals notwendig, Speicher manuell durch Aufruf von 
+     free_result-Funktionen freizugeben.
+     <note>
+      <simpara>
+       Persistente Datenbank-Links stellen einen Sonderfall dar, sie werden
+       durch den gc (garbage collector) <emphasis>nicht</emphasis> zerstört.
+       Siehe auch
+       <link linkend="features.persistent-connections">Persistente 
+Datenbankverbindungen</link>
+      </simpara>
+     </note>
+    </para>
+    
+   </sect2>
+  </sect1>
+    
+  <sect1 id="language.types.null">
+   <title>NULL</title>
+    
+   <para>
+    Der spezielle &null; Wert steht dafür, dass eine Varaiable keinen Wert hat.
+    &null; ist der einzig mögliche Wert des Typs <type>NULL</type>.
+   </para>
+    <note>
+     <simpara>
+      Der Null-Typ wurde in PHP 4 eingeführt.
+     </simpara>
+    </note>
+    
+   <sect2 id="language.types.null.syntax">
+    <title>Syntax</title>
+    <para>
+     Es gibt nur einen Wert des Typs &null;, das Schlüsselwort &null;.
+     Groß/Kleinschreibung spielt keine Rolle.
+     <informalexample>
+      <programlisting role="php">
+$var = NULL;       
+      </programlisting>
+     </informalexample>
+    </para>
+   </sect2>
+  
+  </sect1>
+
+
+
   <sect1 id="language.types.type-juggling">
    <title>Typen-Tricks</title>
 
    <simpara>
     PHP erfordert (bzw. unterstützt) keine explizite Typ-Definitionen
     bei der Deklaration von Variablen; der Typ einer Variablen wird
-    bestimmt durch den Zusammenhang in dem die Variable benutzt wird.
+    durch den Zusammenhang bestimmt in dem die Variable benutzt wird.
     Das bedeutet, dass bei der Zuweisung einer Zeichenkette / eines
     Strings zu einer Variablen <parameter>var</parameter> diese
-    Variable <parameter>var</parameter> den Typ String erhält.
-    Sollten sie dananch der Variablen <parameter>var</parameter> einen
+    Variable <parameter>var</parameter> zum Typ String wird.
+    Sollten Sie dananch der Variablen <parameter>var</parameter> einen
     Integer-Wert zuweisen, wird sie zu einem Integer-Typ.
    </simpara>
    <para>
     Ein Beispiel für die automatische Typ-Konvertierung von PHP ist
     der Plus-Operator '+'. Ist einer der zu addierenden Werte vom Typ
-    double, werden alle Werte als double-Typ gehandhabt. Auch das
-    Ergebnis der Addition wird vom Typ double sein.  Ist dies nicht
-    der Fall, werden Werte als Integer-Typen angesehen und das
-    Ergebnis wird ebenfalls vom Typ Integer sein. Beachten sie, dass
-    hierdurch nicht der Typ der Additions-Elemente selbst beeinflusst
+    <type>float</type>, werden alle Werte als float-Typ gbehandelt. Auch das
+    Ergebnis der Addition wird vom Typ float sein. Andernfalls
+    werden die Werte als <type>integer</type>-Typen angesehen und das
+    Ergebnis wird ebenfalls vom Typ Integer sein. Beachten Sie, dass
+    hierdurch NICHT der Typ der Operanden selbst beeinflusst
     wird; der Unterschied liegt einzig und allein in der Auswertung
-    dieser Elemente.
+    dieser Operanden.
     <informalexample>
      <programlisting role="php">
-$foo = "0";  // $foo ist vom Typ String (ASCII 48)
-$foo++;      // $foo ist immer noch vom Typ String,
-                Inhalt "1" (ASCII 49)
-$foo += 1;   // $foo ist jetzt vom Typ Integer (2)
-$foo = $foo + 1.3;  // $foo ist nun vom Typ double (3.3)
-$foo = 5 + "10 Little Piggies"; // $foo ist vom Typ Integer (15)
-$foo = 5 + "10 Small Pigs";     // $foo ist vom Typ Integer (15)
+$foo = "0";                         // $foo ist vom Typ String (ASCII 48)
+$foo += 2;                          // $foo ist jetzt vom Typ Integer (2)
+$foo = $foo + 1.3;                  // $foo ist nun vom Typ float (3.3)
+$foo = 5 + "10 Sehr kleine Ferkel"; // $foo ist vom Typ Integer (15)
+$foo = 5 + "10 Kleine Schweine";    // $foo ist vom Typ Integer (15)
      </programlisting>
     </informalexample>
    </para>
    <simpara>
-    Wenn für sie die letzten beiden Beispiele gleich sind, beachten
-    sie <link linkend="language.types.string.conversion">
+    Wenn Ihnen die beiden letzten Beispiele merkwürdig erscheinen, beachten
+    Sie die <link linkend="language.types.string.conversion">
     String-Umwandlung</link>.
    </simpara>
    <simpara>
-    Wenn sie die Auswertung einer Variablen als ein spezieller Typ
+    Wenn Sie die Auswertung einer Variablen als einen speziellen Typ
     erzwingen wollen, beachten sie den Abschnitt in <link
-    linkend="language.types.typecasting">Typ-Umwandlung</link>.  Wenn
-    sie den Typ einer Variablen wechseln wollen, sehen sie bitte
+    linkend="language.types.typecasting">Typ-Umwandlung</link>. Wollen Sie
+    den Typ einer Variable ändern, schauen Sie bei
     <function>settype</function> nach.
    </simpara>
    <para>
-    Um die Beispiele dieses Kapitels auszuprobieren, können sie diese
-    per "Copy und Paste" übertragen und die folgende Zeile einfügen,
-    um zu sehen, was passiert:
-    <informalexample>
-     <programlisting role="php">
-echo "\$foo==$foo; ist vom Typ " . gettype( $foo ) . "&lt;br&gt;\n";
-     </programlisting>
-    </informalexample>
+    Um die Beispiele dieses Kapitels auszuprobieren, können Sie die Funktion
+    <function>var_dump</function> verwenden.
    </para>
    <note>
     <para>
-     Das Verhalten einer automatischen Umwandlung ist zur Zeit
-     undefiniert.
+     Das Verhalten einer automatischen Umwandlung zum Typ Array ist zur Zeit
+     nicht definiert.
      <informalexample>
       <programlisting role="php">
 $a = 1;       // $a ist ein Integer-Wert
@@ -621,7 +1627,7 @@
     </para>
     <para>
      Weil das o.a. Beispiel so aussieht, als ob $a ein Array wird,
-     dessen erstes Element ein 'f' enthält, beachten sie folgendes:
+     dessen erstes Element ein 'f' enthält, bedenken Sie folgendes:
      <informalexample>
       <programlisting role="php">
 $a = "1";     // $a ist ein String
@@ -638,7 +1644,7 @@
     </para>
     <para>
      Aus diesem Grund ist das Ergebnis der automatischen Umwandlung
-     seit PHP 3.0.12 und auch in PHP 4.0b3-RC4 undefiniert.  Lösungen
+     seit PHP 3.0.12 und auch in PHP 4.0b3-RC4 nicht definiert. Lösungen
      werden noch dikutiert.
     </para>
    </note>
@@ -648,12 +1654,12 @@
 
     <para>
      Typ-Umwandlung in PHP funktioniert vielfach wie in C: Der Name
-     des geforderten Typs wird vor der umzuwandelnden Variablen in
+     des gewünschten Typs wird vor der umzuwandelnden Variablen in
      Klammern gesetzt.
      <informalexample>
       <programlisting>
-$foo = 10;   // $foo ist ein Integer-Wert
-$bar = (double) $foo;   // $bar ist vom Typ double
+$foo = 10;           // $foo ist ein Integer-Wert
+$bar = (float) $foo; // $bar ist vom Typ float
       </programlisting>
      </informalexample>
     </para>
@@ -661,35 +1667,34 @@
      Folgende Umwandlungen sind möglich:
      <itemizedlist>
       <listitem>
-       <simpara>
-       (int), (integer) - Umwandlung in Integer-Wert
-       </simpara>
+       <simpara>(int), (integer) - nach integer</simpara>
       </listitem>
       <listitem>
-       <simpara>
-       (real), (double), (float) - hin zu double
-       </simpara>
+       <simpara>(bool), (boolean) - nach boolean</simpara>
+      </listitem>
+      <listitem><simpara>(float), (double), (real) - nach float</simpara>
       </listitem>
       <listitem>
-       <simpara>
-       (string) - hin zu String
-       </simpara>
+       <simpara>(string) - nach string</simpara>
       </listitem>
       <listitem>
-       <simpara>
-       (array) - hin zum Array
-       </simpara>
+       <simpara>(array) - nach array</simpara>
       </listitem>
       <listitem>
-       <simpara>
-       (object) - Wandlung zum Objekt
+       <simpara>(object) - Wandlung zum Objekt
        </simpara>
       </listitem>
      </itemizedlist>
     </para>
+    <tip>
+     <simpara>
+      Ansttat eine Variable in einen String umzuwandeln, können Sie die
+      Variable auch in doppelte Anführungszeichen einschließen.
+     </simpara>
+    </tip>
     <para>
      Beachten sie, dass Tabulatoren und Leerzeichen innerhalb der
-     Klammern erlaubt sind. Deshalb sind die folgenden Beispiel
+     Klammern erlaubt sind. Deshalb sind die folgenden Beispiele
      identisch:
      <informalexample>
       <programlisting role="php">
@@ -700,17 +1705,33 @@
     </para>
     <para>
      Es ist nicht immer offenkundig, was bei der Typ-Umwandlung
-     geschieht. Zum besseren Verständnis sollte das Folgende beachtet
-     werden:
+     geschieht. Für weitere Informationen schauen Sie unter folgenden
+     Abschnitten nach:
+     <itemizedlist>
+      <listitem>
+       <simpara><link linkend="language.types.boolean.casting">Umwandlung
+        nach boolean</link></simpara>
+      </listitem>
+      <listitem>
+       <simpara><link linkend="language.types.integer.casting">Umwandlung
+        nach integer</link></simpara>
+      </listitem>
+     </itemizedlist>
+    </para>
+    <para>
+     Wenn Sie eine Umwandlung eines Arrays zu einem String vornehmen oder
+     erzwingen, ist das Ergebnis das Wort <literal>Array</literal>. Wenn
+     Sie eine Umwandlung eines Objekts zu einem String vornehmen oder
+     erzwingen, ist das Ergebnis das Wort <literal>Objekt</literal>.
     </para>
     <para>
-     Bei der Umwandlung einer skalaren oder String-Variablen wird die
-     Variable das erste Element des Arrays:
+     Bei der Umwandlung einer skalaren oder String-Variablen zu einem Array wird
+     die Variable das erste Element des Arrays:
      <informalexample>
       <programlisting role="php">
 $var = 'ciao';
 $arr = (array) $var;
-echo $arr[0];  // gibt 'ciao' aus
+echo $arr[0];        // gibt 'ciao' aus
       </programlisting>
      </informalexample>
     </para>
@@ -720,9 +1741,11 @@
      Eigenschafts-Name wird 'scalar':
      <informalexample>
       <programlisting role="php">
+<![CDATA[
 $var = 'ciao';
 $obj = (object) $var;
-echo $obj-&gt;scalar;  // gibt 'ciao' aus
+echo $obj->scalar;   // gibt 'ciao' aus
+]]>
       </programlisting>
      </informalexample>
     </para>


Reply via email to