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 ("<<<"). Hierf�r ist nach
- <literal><<<</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">
-<?php
-$str = <<<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 ("<<<"). Hierf�r ist nach
+ <literal><<<</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 <<<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">
-<?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: '<p>Nummer: 9</p>' */
+/*
+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 = "<p>Nummer: $num</p>";
+$str = "<p>Nummer: $num</p>";
-/* Dieser wird zu '<p>Nummer: $num</p>' */
+// Dieser wird zu '<p>Nummer: $num</p>'
$num = 9;
-$str = '<p>Nummer: $num</p>';
-?>
+$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];
-?>
- </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 & 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 ) . "<br>\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> => <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> => </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">
-<?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">
-<?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 ) . "<br>\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->scalar; // gibt 'ciao' aus
+echo $obj->scalar; // gibt 'ciao' aus
+]]>
</programlisting>
</informalexample>
</para>