svn: /phpdoc/de/trunk/language/oop5/ changelog.xml inheritance.xml properties.xml serialization.xml
[email protected] (Oliver Albers)
| Newsgroups | php.doc.de |
|---|---|
| Message-ID | <[email protected]> |
simp Sat, 12 Jun 2010 22:48:13 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=300415
Log:
Weitere Seiten im OOP5-Kapitel
Changed paths:
A phpdoc/de/trunk/language/oop5/changelog.xml
A phpdoc/de/trunk/language/oop5/inheritance.xml
A phpdoc/de/trunk/language/oop5/properties.xml
A phpdoc/de/trunk/language/oop5/serialization.xml
svn-diffs-300415.txt
(text/x-diff, 19.6 KB)
Added: phpdoc/de/trunk/language/oop5/changelog.xml
===================================================================
--- phpdoc/de/trunk/language/oop5/changelog.xml (rev 0)
+++ phpdoc/de/trunk/language/oop5/changelog.xml 2010-06-12 22:48:13 UTC (rev 300415)
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 299561 Maintainer: simp Status: ready -->
+<sect1 xml:id="language.oop5.changelog" xmlns="http://docbook.org/ns/docbook">
+ <title>OOP-Changelog</title>
+ <para>
+ Hier werden Änderungen am OOP-Modell von PHP 5 protokolliert. Beschreibungen und
+ andere Hinweise zu diesen Features werden innerhalb der OOP-5-Dokumentation
+ dargelegt.
+ </para>
+ <para>
+ <informaltable>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>&Version;</entry>
+ <entry>&Description;</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>5.3.0</entry>
+ <entry>
+ Geändert: Es ist nun möglich eine Klasse mittels einer Variablen
+ zu referenzieren (z.B. <literal>echo $classname::constant;</literal>).
+ Der Wert der Variable darf kein Schlüsselwort sein (z.B.
+ <literal>self</literal>, <literal>parent</literal> oder
+ <literal>static</literal>).
+ </entry>
+ </row>
+ <row>
+ <entry>5.3.0</entry>
+ <entry>
+ Geändert: Ein Fehler der Stufe <constant>E_WARNING</constant> wird
+ ausgelöst, wenn die magischen Methoden für
+ <link linkend="language.oop5.overloading">Überladung</link>
+ als <link linkend="language.oop5.static">static</link> deklariert
+ werden. Dies erzwingt auch die Anforderung nach öffentlicher
+ Sichtbarkeit.
+ </entry>
+ </row>
+ <row>
+ <entry>5.3.0</entry>
+ <entry>
+ Geändert: Vor PHP 5.3.0 konnten Exceptions, die in einer
+ <link linkend="language.oop5.autoload">__autoload</link>-Funktion geworfen
+ wurden, nicht mit einem <link linkend="language.exceptions">catch</link>-Block
+ gefangen werden und resultierten in einem "fatal error". Nun können Exceptions,
+ die in einer __autoload-Funktion geworfen wurden, im
+ <link linkend="language.exceptions">catch</link>-Block unter einer Bedingung
+ gefangen werden. Wenn eine selbst definierte Exception geworfen wird, so muss
+ diese Exception verfügbar sein. Die __autoload-Funktion kann jedoch rekursiv
+ aufgerufen werden, um die Exceptionklasse automatisch zu laden.
+ </entry>
+ </row>
+ <row>
+ <entry>5.3.0</entry>
+ <entry>
+ Hinzugefügt: Die Methode <link linkend="language.oop5.overloading">__callStatic</link>.
+ </entry>
+ </row>
+ <row>
+ <entry>5.3.0</entry>
+ <entry>
+ Hinzugefügt: Unterstützung für die
+ <link linkend="language.types.string.syntax.heredoc">heredoc</link>-
+ und <link linkend="language.types.string.syntax.heredoc">nowdoc</link>-Syntax
+ für <emphasis>const</emphasis> und Definition von Eigenschaften in einer
+ Klasse. Beachten Sie: die heredoc-Werte müssen den gleichen Regeln
+ wie Strings in doppelten Anführungszeichen folgen (d.h. keine Variablen
+ beinhalten).
+ </entry>
+ </row>
+ <row>
+ <entry>5.3.0</entry>
+ <entry>
+ Hinzugefügt:
+ <link linkend="language.oop5.late-static-bindings">Späte statische Bindung</link>.
+ </entry>
+ </row>
+ <row>
+ <entry>5.3.0</entry>
+ <entry>
+ Hinzugefügt: Die Methode <link linkend="language.oop5.magic.invoke">__invoke</link>.
+ </entry>
+ </row>
+ <row>
+ <entry>5.2.0</entry>
+ <entry>
+ Geändert: Die Methode
+ <link linkend="language.oop5.magic.tostring">__toString</link> wurde nur
+ in direkter Verbindung mit <function>echo</function> oder
+ <function>print</function> aufgerufen. Nun wird sie in jedem
+ String-Kontext aufgerufen (z.B. in <function>printf</function> mit dem
+ <literal>%s</literal>-Modifizierer), aber nicht in anderen Kontexten
+ (z.B. mit dem <literal>%d</literal>-Modifizierer). Seit PHP 5.2.0 löst die
+ Konvertierung von Objekten ohne <literal>__toString</literal>-Methode zu
+ Strings einen Fehler der Stufe <constant>E_RECOVERABLE_ERROR</constant>
+ aus.
+ </entry>
+ </row>
+ <row>
+ <entry>5.1.3</entry>
+ <entry>
+ Geändert: In vorhergehenden Versionen von PHP 5 wurde die Verwendung
+ von <literal>var</literal> als veraltet betrachtet und löste einen
+ Fehler der Stufe <constant>E_STRICT</constant> aus. Dies ist nicht
+ länger veraltet und daher wird kein Fehler mehr ausgelöst.
+ </entry>
+ </row>
+ <row>
+ <entry>5.1.0</entry>
+ <entry>
+ Geändert: Die statische Methode
+ <link linkend="language.oop5.magic.set-state">__set_state</link>
+ wird nun für Klassen aufgerufen, wenn sie durch
+ <function>var_export</function> exportiert werden.
+ </entry>
+ </row>
+ <row>
+ <entry>5.1.0</entry>
+ <entry>
+ Hinzugefügt: Die Methoden
+ <link linkend="language.oop5.overloading.members">__isset</link> und
+ <link linkend="language.oop5.overloading.members">__unset</link>.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </para>
+</sect1>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/de/trunk/language/oop5/changelog.xml
___________________________________________________________________
Added: svn:keywords
+ Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
Added: svn:eol-style
+ native
Added: phpdoc/de/trunk/language/oop5/inheritance.xml
===================================================================
--- phpdoc/de/trunk/language/oop5/inheritance.xml (rev 0)
+++ phpdoc/de/trunk/language/oop5/inheritance.xml 2010-06-12 22:48:13 UTC (rev 300415)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 297028 Maintainer: simp Status: ready -->
+ <sect1 xml:id="language.oop5.inheritance" xmlns="http://docbook.org/ns/docbook">
+ <title>Objekt-Vererbung</title>
+ <para>
+ Vererbung ist ein gängiges Prinzip der Programmierung und PHP verwendet
+ dieses Prinzip in seinem Objektmodell. Dieses Prinzip beeinflusst die
+ Art und Weise, in der mehrere Klassen und Objekte in Beziehung zueinander
+ stehen.
+ </para>
+ <para>
+ Wenn man zum Beispiel von einer Klasse erbt, so erbt die Unterklasse
+ alle Methoden der Sichtbarkeiten public und protected von der Vaterklasse.
+ Wenn eine Klasse diese Methoden nicht überschreibt, wird die ursprüngliche
+ Funktionalität beibehalten.
+ </para>
+ <para>
+ Dies ist nützlich, um Funktionalität zu definieren und zu abstrahieren und
+ erlaubt es, zusätzliche Funktionalität in ähnlichen Objekten zu
+ implementieren, ohne sämtliche gemeinsame Funktionalitäten neu
+ implementieren zu müssen.
+ </para>
+ <sect2 xml:id="language.oop5.inheritance.examples">
+ <example xml:id="language.oop5.inheritance.examples.ex1">
+ <title>Beispiel für Vererbung</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+class foo
+{
+ public function printItem($string)
+ {
+ echo 'Foo: ' . $string . PHP_EOL;
+ }
+
+ public function printPHP()
+ {
+ echo 'PHP ist großartig.' . PHP_EOL;
+ }
+}
+
+class bar extends foo
+{
+ public function printItem($string)
+ {
+ echo 'Bar: ' . $string . PHP_EOL;
+ }
+}
+
+$foo = new foo();
+$bar = new bar();
+$foo->printItem('baz'); // Ausgabe: 'Foo: baz'
+$foo->printPHP(); // Ausgabe: 'PHP ist großartig.'
+$bar->printItem('baz'); // Ausgabe: 'Bar: baz'
+$bar->printPHP(); // Ausgabe: 'PHP ist großartig.'
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </sect2>
+ </sect1>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/de/trunk/language/oop5/inheritance.xml
___________________________________________________________________
Added: svn:keywords
+ Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
Added: svn:eol-style
+ native
Added: phpdoc/de/trunk/language/oop5/properties.xml
===================================================================
--- phpdoc/de/trunk/language/oop5/properties.xml (rev 0)
+++ phpdoc/de/trunk/language/oop5/properties.xml 2010-06-12 22:48:13 UTC (rev 300415)
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 297028 Maintainer: simp Status: ready -->
+ <sect1 xml:id="language.oop5.properties" xmlns="http://docbook.org/ns/docbook">
+ <title>Eigenschaften</title>
+
+ <para>
+ Variablen in einer Klasse werden "Eigenschaften" genannt. Die
+ Begriffe "Attribute" oder "Felder" werden ebenfalls verwendet,
+ um sich auf das selbe Konzept zu beziehen, aber innerhalb
+ dieser Referenz wird der Begriff "Eigenschaften" verwendet.
+ Diese werden definiert, indem man eines der Schlüsselwörter
+ <literal>public</literal>, <literal>protected</literal>
+ oder <literal>private</literal> gefolgt von einer regulären
+ Variablendeklaration verwendet. Die Deklaration darf eine
+ Initialisierung des Variablenwertes beinhalten, der zu
+ setzende Wert muss dabei allerdings ein konstanter Wert
+ sein - d.h. dieser muss zum Kompilierungszeitpunkt
+ ausgewertet werden können und darf nicht von Informationen
+ abhängen, die erst zur Laufzeit zur Verfügung stehen.
+ </para>
+ <para>
+ Siehe <xref linkend="language.oop5.visibility" /> für mehr
+ Informationen zur Bedeutung von <literal>public</literal>,
+ <literal>protected</literal> und <literal>private</literal>.
+ </para>
+ <note>
+ <para>
+ Um Abwärtskompatibilität mit PHP 4 zu gewährleisten, akzeptiert
+ PHP 5 weiterhin die Verwendung des Schlüsselwortes
+ <literal>var</literal> zur Deklaration von Eigenschaften anstelle
+ von (oder zusätzlich zu) <literal>public</literal>,
+ <literal>protected</literal> oder <literal>private</literal>.
+ <literal>var</literal> wird jedoch nicht mehr benötigt.
+ In den Versionen von PHP 5.0 bis 5.1.3 wurde die Verwendung
+ von <literal>var</literal> als veraltet betrachtet und
+ erzeugte eine <constant>E_STRICT</constant>-Warnung, aber
+ seit PHP 5.1.3 ist dies nicht länger veraltet und erzeugt
+ keine Warnung.
+ </para>
+ <para>
+ Wenn eine Eigenschaft mittels <literal>var</literal> anstelle
+ von <literal>public</literal>, <literal>protected</literal>
+ oder <literal>private</literal> deklariert wird, so wird
+ PHP 5 diese Eigenschaft so behandeln, als wäre sie mittels
+ <literal>public</literal> deklariert worden.
+ </para>
+ </note>
+ <para>
+ Innerhalb der Methoden einer Klasse kann auf Eigenschaften,
+ Konstanten und Methoden in der Form
+ <varname>$this->Eigenschaft</varname> (wobei
+ <literal>Eigenschaft</literal> der Name der Eigenschaft ist)
+ zugegriffen werden, solange nicht aus dem Kontext einer statischen
+ Methode auf eine statische Eigenschaft zugegriffen wird. In diesem
+ Fall kann mittels <varname>self::$Eigenschaft</varname> darauf
+ zugegriffen werden. Siehe auch
+ <link linkend="language.oop5.static">Static Schlüsselwort</link>
+ für mehr Informationen zu diesem Thema.
+ </para>
+ <para>
+ Die Pseudo-Variable <varname>$this</varname> ist innerhalb
+ jeder Klassenmethode verfügbar, wenn diese Methode im Kontext
+ eines Objektes aufgerufen wird. <varname>$this</varname> ist
+ eine Referenz auf das aufrufende Objekt (üblicherweise das
+ Objekt, zu dem diese Methode gehört; möglicherweise ein anderes
+ Objekt, wenn die Methode
+ <link linkend="language.oop5.static">statisch</link> aus einem
+ sekundären Objekt aufgerufen wird).
+ </para>
+
+ <para>
+ <example>
+ <title>Deklaration von Eigenschaften</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class SimpleClass
+{
+ // Ungültige Deklarationen von Eigenschaften:
+ public $var1 = 'Hallo ' . 'Welt';
+ public $var2 = <<<EOD
+Hallo Welt
+EOD;
+ public $var3 = 1+2;
+ public $var4 = self::myStaticMethod();
+ public $var5 = $myVar;
+
+ // Gültige Deklarationen von Eigenschaften:
+ public $var6 = myConstant;
+ public $var7 = array(true, false);
+
+ // Dies ist nur in PHP 5.3.0 oder später gültig.
+ public $var8 = <<<'EOD'
+Hallo Welt
+EOD;
+}
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+
+ <note>
+ <para>
+ Es gibt einige nützliche Funktionen für den Umgang mit Klassen
+ und Objekten. Siehe hierzu
+ <link linkend="ref.classobj">Klassen- und Objekt-Funktionen</link>.
+ </para>
+ </note>
+
+ <para>
+ Im Gegensatz zur
+ <link linkend="language.types.string.syntax.heredoc">Heredoc-Syntax</link>
+ kann die
+ <link linkend="language.types.string.syntax.nowdoc">Nowdoc-Syntax</link>
+ in jedem Kontext für statische Daten verwendet werden, einschließlich
+ der Deklaration von Eigenschaften.
+ <example>
+ <title>Beispiel für ein nowdoc zur Initialisierung einer Eigenschaft</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class foo {
+ // Seit PHP 5.3.0
+ public $bar = <<<'EOT'
+bar
+EOT;
+}
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <note>
+ <para>
+ Unterstützung für Nowdoc wurde in PHP 5.3.0 hinzugefügt.
+ </para>
+ </note>
+ </sect1>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/de/trunk/language/oop5/properties.xml
___________________________________________________________________
Added: svn:keywords
+ Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
Added: svn:eol-style
+ native
Added: phpdoc/de/trunk/language/oop5/serialization.xml
===================================================================
--- phpdoc/de/trunk/language/oop5/serialization.xml (rev 0)
+++ phpdoc/de/trunk/language/oop5/serialization.xml 2010-06-12 22:48:13 UTC (rev 300415)
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 297557 Maintainer: simp Status: ready -->
+ <sect1 xml:id="language.oop5.serialization" xmlns="http://docbook.org/ns/docbook">
+ <title>Serialisierung von Objekten</title>
+ <title>Serialisierung von Objekten - Objekte in Sessions</title>
+
+ <para>
+ <function>serialize</function> erzeugt einen String, welcher
+ die Byte-Stream-Repräsentation eines jeden Wertes besitzt,
+ der in PHP gespeichert werden kann.
+ <function>unserialize</function> kann diesen String verwenden,
+ um die ursprünglichen Variablenwerte wiederherzustellen. Verwendet
+ man <function>serialize</function>, um ein Objekt zu speichern,
+ so werden alle Variablen dieses Objektes gespeichert. Die
+ Methoden des Objektes werden nicht gespeichert, nur der Name
+ der Klasse.
+ </para>
+
+ <para>
+ Damit man imstande ist, ein Objekt mit <function>unserialize</function>
+ wiederherzustellen, muss die Klasse des Objektes definiert sein.
+ Das heißt, wenn man ein Objekt der Klasse A serialisiert, erhält man
+ einen String, der sich auf die Klasse A bezieht und die Werte
+ aller darin enthaltenen Variablen beinhaltet. Wenn man in einer
+ anderen Datei diesen String wieder zu einem Objekt der Klasse A
+ deserialisieren will, so muss die Klasse A in dieser Datei
+ vorher bekannt sein. Dies kann man erreichen, indem man die
+ Definition der Klasse A in eine mittels include
+ ladbare Datei auslagert und diese Datei einbindet oder die Funktion
+ <function>spl_autoload_register</function> verwendet.
+ </para>
+
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+<?php
+// classa.inc:
+
+ class A {
+ public $one = 1;
+
+ public function show_one() {
+ echo $this->one;
+ }
+ }
+
+// page1.php:
+
+ include("classa.inc");
+
+ $a = new A;
+ $s = serialize($a);
+ // $s irgendwo ablegen, wo page2.php dies finden kann.
+ file_put_contents('store', $s);
+
+// page2.php:
+
+ // Dies ist nötig, damit unserialize korrekt funktioniert.
+ include("classa.inc");
+
+ $s = file_get_contents('store');
+ $a = unserialize($s);
+
+ // Nun kann man die Funktion show_one() des Objektes $a
+ // verwenden.
+ $a->show_one();
+?>
+]]>
+ </programlisting>
+ </informalexample>
+
+ <para>
+ Wenn eine Anwendung Sessions verwendet und die Funktion
+ <function>session_register</function> benutzt, um Objekte zu
+ registrieren, so werden diese Objekte automatisch am Schluss jeder
+ PHP-Seite serialisiert und in jeder nachfolgenden PHP-Seite
+ deserialisiert. Das heißt, dass diese Objekte in jeder Seite
+ der Anwendung auftauchen können, sobald diese Teil der Session
+ werden. Beachten Sie im bezug auf
+ <function>session_register</function>: &removed.php.future;
+ </para>
+
+ <para>
+ Es ist dringend empfohlen, dass wenn eine Anwendung Objekte zur späteren
+ Verwendung in der Anwendung serialisiert, die Klassendefinitionen in
+ der gesamten Anwendung eingebunden werden. Wird dies nicht beachtet, so
+ wird das Objekt ohne eine Klassendefinition deserialisiert, was dazu
+ führen wird, dass PHP dem Objekt eine Klasse
+ <classname>__PHP_Incomplete_Class_Name</classname> zuweisen wird, welche
+ keine Methoden besitzt. Dies wird das Objekt nutzlos machen.
+ </para>
+
+ <para>
+ Wenn also im obigen Beispiel <varname>$a</varname> Teil einer Session würde,
+ indem man <literal>session_register("a")</literal> benutzt, so sollte die
+ Datei <literal>classa.inc</literal> in jeder Seite eingebunden werden, nicht
+ nur in <filename>page1.php</filename> und <filename>page2.php</filename>.
+ </para>
+ </sect1>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/de/trunk/language/oop5/serialization.xml
___________________________________________________________________
Added: svn:keywords
+ Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
Added: svn:eol-style
+ native