✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Eine einfache Möglichkeit, eine PHP-Standardklasse in einen bestimmten Typ umzuwandeln

14

Wenn Sie mit objektorientiertem PHP in WordPress arbeiten und verschiedene Modelle erstellen, die zu Ihren Webanwendungen passen, stehen die Chancen gut, dass Sie sich irgendwann während der Ausführung eines Programms damit befassen werden, serialisierte Versionen dieser Modelle abzurufen.

Hier ist jedoch die Sache: Manchmal kommen diese deserialisierten Daten als Standard-PHP-Klassen zurück. Dies bedeutet, dass Sie, wenn Sie den Typ untersuchen (durch verschiedene Debugging-Tools), feststellen werden, dass es sich um den Typ von stdClass handelt.

Wenn Sie Ihre Modelle richtig erstellt haben, wird Ihr Code Funktionen haben, die die stdClass nicht hat, und Sie werden sie aufrufen wollen.

Außerdem können Sie sie nicht einfach von einem Typ in einen anderen umwandeln, wie dies bei nativen Typen (z. B. Zeichenfolgen, Ganzzahlen usw.) möglich ist. In solchen Situationen müssen Sie in der Lage sein, eine PHP-Standardklasse in einen bestimmten Typ umzuwandeln.

Und hier ist eine Funktion, die Ihnen dabei helfen wird.

Wandeln Sie eine PHP-Standardklasse in einen bestimmten Typ um

Nehmen Sie für dieses Beispiel Folgendes an:

  1. Ich habe eine Klasse mit dem Namespace AcmeModelProduct.
  2. Es wird irgendwann in der WordPress-Datenbank gespeichert, aber beim Abrufen als Instanz von stdClass festgelegt.
  3. Ich brauche die desialisierte Version des Objekts, um die des Produkts zu sein .

Zu diesem Zweck habe ich die folgende Funktion zur Verfügung, die ich bei Bedarf in Projekte einfüge:

Sicher, die Funktion wird so detailliert kommentiert, wie ich liefern kann, aber es gibt ein paar Dinge, die ich im Kontext eines Beitrags etwas ausführlicher erklären kann als im Kontext eines Code-Kommentars.

Den Kodex verstehen

Zunächst ist es wichtig sicherzustellen, dass Sie die folgenden PHP-Funktionen verstehen (die alle im PHP-Handbuch gut definiert sind):

  • unserialisieren. Erstellt einen PHP-Wert aus einer gespeicherten Darstellung.
  • sprintf. Gibt eine formatierte Zeichenfolge zurück
  • Strlen. Stringlänge erhalten
  • strstr. Suchen Sie das erste Vorkommen einer Zeichenfolge.
  • serialisieren. Erzeugt eine speicherbare Darstellung eines Werts.

Ja, die eingehende Instanz der Klasse wird abgerufen und dann in den angegebenen Typ umgewandelt, aber wie spielen die obigen Funktionen dabei eine Rolle? Es hat damit zu tun, wie eine Klasse in die WordPress-Datenbank serialisiert wird.

Nehmen Sie zum Beispiel die folgende Zeichenfolge:

O:17:"AcmeModelProduct":8:{s:25:"�AcmeModelProduct�number";s:3:"532";s:23:"�AcmeModelProduct�name";s:23:"Aura Bath & Spa - Matte";s:27:"�AcmeModelProduct�longName";s:56:"Aura Bath & Spa Waterborne Interior Paint - Matte Finish";s:22:"�AcmeModelProduct�url";s:37:"http://www.benjaminmoore.com/aura_532";s:27:"�AcmeModelProduct�shortUrl";s:9:"/aura_532";s:26:"�AcmeModelProduct�image1x";s:153:"www2.benjaminmoore.com/ShowPropertyServlet?nodePath=/BEA Repository/imagerepository/public_site/product_images_new/IA_pri_0532//image_88x86.content_en_US";s:26:"�AcmeModelProduct�image2x";s:155:"www2.benjaminmoore.com/ShowPropertyServlet?nodePath=/BEA Repository/imagerepository/public_site/product_images_new/IA_pri_0532//image_197x193.content_en_US";s:26:"�AcmeModelProduct�image3x";s:155:"www2.benjaminmoore.com/ShowPropertyServlet?nodePath=/BEA Repository/imagerepository/public_site/product_images_new/IA_pri_0532//image_197x193.content_en_US";}

Ich weiß – es ist nicht gerade ein Vergnügen, es zu überprüfen, aber genau so serialisiert WordPress ein Objekt. Wenn es aus der Datenbank abgerufen wird, erfolgt dies außerdem und wird dann als stdClass- Instanz zurückgegeben, nicht als Instanz des Typs, den es vor dem Speichern hatte.

Hier kommt die obige Funktion ins Spiel. Um es auf seinen Deal-Typ zurückzusetzen, sollten Sie es als solchen wirken. Und dazu können Sie einfach Folgendes tun:

Beachten Sie, dass ich ein Objekt abrufe, das in die Optionstabelle serialisiert wurde. Ich behaupte nicht, ob Sie dies tun sollten oder nicht, dies dient nur zu Beispielzwecken.

Beachten Sie zweitens, dass ich cast für eine Instanz von $this aufrufe, sodass $this eine Instanz einer Klasse oder eine Methode in der Basisklasse sein könnte. Es spielt keine Rolle (solange letzteres als geschützt markiert ist ).

Von dort haben Sie nun eine Instanz der Klasse, die Sie ursprünglich gespeichert haben, mit allen Informationen, die Ihnen sozusagen beim ersten Speichern zur Verfügung standen.

Aufnahmequelle: tommcfarlin.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen