Zusammenfassung: In diesem Artikel zeigt uns der Autor verschiedene fortgeschrittene OOP-Technologien in PHP anhand seines Verständnisses von OOP-Konzepten. Wie der Autor sagte: „
Wenn Sie die grundlegenden OOP-Konzepte verstehen, dann bin ich es
.“Es werden fortgeschrittenere Techniken gezeigt.
Serialisieren (Serialisieren)
PHP unterstützt keine persistenten Objekte. In OOP ist ein persistentes Objekt ein Objekt, das den Status und die Funktionalität zwischen Referenzen in mehreren Anwendungen beibehalten kann. Dies bedeutet, dass das Objekt in einer Datei oder Datenbank gespeichert und geladen werden kann später widersprechen. Dies ist der sogenannte Serialisierungsmechanismus. PHP verfügt über eine Serialisierungsmethode, die für ein Objekt aufgerufen werden kann, und die Serialisierungsmethode kann eine Zeichenfolgendarstellung des Objekts zurückgeben. Allerdings speichert die Serialisierung nur die Mitgliedsdaten des Objekts und nicht die Methoden.
Wenn Sie in PHP4 das Objekt in die Zeichenfolge $s serialisieren, das Objekt dann freigeben und es dann in $obj deserialisieren, können Sie die Methoden des Objekts weiterhin verwenden! Ich empfehle dies nicht, da (a) es in der Dokumentation keine Garantie dafür gibt, dass dieses Verhalten auch in zukünftigen Versionen weiterhin funktioniert. (b) Dies kann zu Missverständnissen führen, wenn Sie eine serialisierte Version auf der Festplatte speichern und das Skript beenden. Wenn Sie dieses Skript später ausführen, können Sie nicht erwarten, dass beim Deserialisieren eines Objekts die Methoden des Objekts vorhanden sind, da die Zeichenfolgendarstellung überhaupt keine Methoden enthält.
Alles in allem ist die Serialisierung in PHP sehr nützlich, um Mitgliedsvariablen eines Objekts zu speichern. (Sie können auch verwandte Arrays und Arrays in eine Datei serialisieren.)
Beispiel:
<?php
$obj=new Classfoo();
$str=serialize($obj);
//Speichern Sie $str auf der Festplatte
//Ein paar Monate später
//Laden Sie str von der Festplatte
$obj2=unserialize($str)
Sie haben die Mitgliedsdaten wiederhergestellt, nicht jedoch die Methoden (laut Dokumentation). Dies ergibt die einzige Möglichkeit, auf Mitgliedsvariablen zuzugreifen (Sie haben keine andere Möglichkeit!), indem Sie beispielsweise $obj2->x verwenden. Probieren Sie es also nicht zu Hause aus.
Es gibt einige Möglichkeiten, dieses Problem zu lösen. Ich lasse sie weg, weil sie für diesen prägnanten Artikel zu schlecht sind. Ich würde mich über vollständig serialisierte Funktionen in nachfolgenden PHP-Versionen freuen.
Verwenden von Klassen zur Datenspeicherung Eines der großartigen Dinge an PHP und OOP ist, dass Sie ganz einfach eine Klasse definieren können, um etwas zu tun, und die entsprechende Klasse jederzeit aufrufen können, wenn Sie sie verwenden möchten. Angenommen, Sie verfügen über ein HTML-Formular, das es dem Benutzer ermöglicht, ein Produkt auszuwählen, indem er die Produkt-ID-Nummer auswählt. Die Datenbank enthält Produktinformationen und Sie möchten das Produkt, seinen Preis usw. anzeigen. Sie haben unterschiedliche Arten von Produkten und die gleiche Aktion kann für verschiedene Produkte unterschiedliche Auswirkungen haben. Das Anzeigen eines Tons kann beispielsweise bedeuten, dass er abgespielt wird, bei anderen Arten von Produkten kann es jedoch bedeuten, dass ein in einer Datenbank gespeichertes Bild angezeigt wird. Sie können OOP oder PHP verwenden, um den Codierungsaufwand zu reduzieren und die Qualität zu verbessern.
Definieren Sie eine Produktklasse, definieren Sie die Methoden, die sie haben soll (z. B. Anzeige), und definieren Sie dann eine Klasse für jeden Produkttyp, abgeleitet von der Produktklasse (SoundItem-Klasse, ViewableItem-Klasse usw.), die die Methoden des Produkts abdeckt Klassen, damit sie sich so verhalten, wie Sie es möchten.
Benennen Sie die Klasse entsprechend dem Typfeld jedes Produkts in der Datenbank. Eine typische Produkttabelle kann Felder (ID, Typ, Preis, Beschreibung usw.) enthalten. Anschließend können Sie sie im Verarbeitungsskript aus der Datenbank abrufen Holen Sie sich den Typwert von und instanziieren Sie dann ein Objekt mit dem Namen type:
<?php
$obj=new $type()
;
Dies ist eine sehr gute Funktion von PHP. Sie können die Anzeigemethode oder andere Methoden von $obj aufrufen, ohne den Typ des Objekts zu berücksichtigen. Mit dieser Technik müssen Sie das Skript nicht ändern, um einen neuen Objekttyp hinzuzufügen, sondern nur eine Klasse, die damit umgeht.
Diese Funktion ist sehr leistungsstark. Definieren Sie einfach Methoden, ohne die Typen aller Objekte zu berücksichtigen, implementieren Sie sie in verschiedenen Klassen in verschiedenen Methoden und verwenden Sie sie dann im Hauptskript für jedes Objekt, nein, wenn ... sonst, nein. Erfordert zwei Programmierer. nur glücklich.
Sind Sie nun der Meinung, dass die Programmierung einfach, die Wartung kostengünstig und die Wiederverwendbarkeit wahr ist?
Wenn Sie eine Gruppe von Programmierern leiten, ist die Zuweisung von Aufgaben einfach; jede Person ist möglicherweise für einen Objekttyp und die Klasse verantwortlich, die ihn verarbeitet.
Durch diese Technologie kann eine Internationalisierung erreicht werden. Wenden Sie einfach die entsprechende Klasse entsprechend dem vom Benutzer ausgewählten Sprachfeld an und so weiter.
Kopieren und Klonen
Wenn Sie ein Objekt von $obj erstellen, können Sie das Objekt mit $obj2=$obj kopieren. Das neue Objekt ist eine Kopie (keine Referenz) von $obj, hat also zu diesem Zeitpunkt den Status von $obj . Manchmal möchten Sie dies nicht tun. Sie möchten einfach ein neues Objekt wie die obj-Klasse generieren. Sie können den Konstruktor der Klasse aufrufen, indem Sie die new-Anweisung verwenden. Dies kann auch in PHP durch Serialisierung und eine Basisklasse erreicht werden, alle anderen Klassen müssen jedoch von der Basisklasse abgeleitet werden.
Betreten der Gefahrenzone
Wenn Sie ein Objekt serialisieren, erhalten Sie eine Zeichenfolge in einem bestimmten Format, die Sie bei Interesse abfragen können. In der Zeichenfolge steht der Name der Klasse (großartig!) und Sie können ihn einfügen wird wie folgt herausgenommen:
<?php
$herring=serialize($obj);
$vec=explode(':',
$herring(""",$vec[2]);
Angenommen, Sie erstellen eine „Universum“-Klasse und erzwingen die Erweiterung aller Klassen aus dem Universum, können Sie eine Klonmethode im Universum wie folgt definieren:
<?php
function clone() {
$herring=serialize($
$vec=
).explosion(':',$herring);
$nam=str_replace(""",'',$vec[2]);
$ret=new $nam;
return $ret;
}
}
/ /Then
$obj=new Something();
//Aus Universum erweitern
$other=$obj->clone();
Was Sie erhalten, ist ein neues Objekt der Something-Klasse, das mit dem Objekt identisch ist, das durch die Verwendung der neuen Methode und den Aufruf des Konstruktors erstellt wurde. Ich weiß nicht, ob das für Sie funktionieren wird, aber es ist eine gute Faustregel, dass die Universumsklasse den Namen der abgeleiteten Klasse kennt. Der Fantasie sind keine Grenzen gesetzt.
Diese Anweisung schreibt die aktuelle Uhrzeit.