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