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

Serialisierung von WordPress-Klassen mit PHP

30

Wenn Sie es gewohnt sind, mit Modellen zu arbeiten (in jeder Grundlage oder jedem Framework, aber speziell in WordPress), besteht die Möglichkeit, dass Sie irgendwann eine Instanz des Modells serialisieren müssen.

Sicher, das Schreiben der Klasse in eine Datenbank mit den integrierten Funktionen von PHP ist einfach genug; Es ist jedoch wichtig, ein wenig Flexibilität einzuführen, insbesondere in Bezug auf die Bereitstellung auf anderen Plattformen.

Nehmen wir zum Beispiel an, Sie erstellen eine Anwendung auf WordPress, die eine bestimmte Art von Informationen enthalten soll, die in einem Modell dargestellt werden. Das Modell ist dann über eine mobile Anwendung über die REST-API zugänglich .

Eine der einfachsten Möglichkeiten, dies zu erreichen, ist wohl die Verwendung von JSON. Es handelt sich um ein Format, das in verschiedenen Sprachen und Plattformen funktioniert, von diesen Plattformen problemlos serialisiert und deserialisiert und bei Bedarf über die Leitung gesendet werden kann.

Und es ist unglaublich einfach, dies in PHP zu implementieren. Sie müssen nur sicherstellen, dass Ihre Klasse die JsonSerializable -Schnittstelle implementiert.

Serialisierung von WordPress-Klassen mit PHP

Aus der Dokumentation geht hervor, dass die Schnittstelle Folgendes ausführt:

Objekte, die JsonSerializable implementieren, können ihre JSON-Darstellung anpassen, wenn sie mit json_encode() codiert werden.

Die einzige Methode, die eine Klasse bereitstellen muss, ist jsonSerialize, und obwohl Sie wahrscheinlich alle Eigenschaften eines Objekts (sowie seinen Status bei jedem Aufruf) serialisieren möchten, können Sie die Implementierung nach Belieben anpassen.

Wenn Sie beispielsweise eine Klasse haben und nur ihre name-Eigenschaft implementieren möchten, implementieren Sie die Funktion wie folgt :

<?php

class Acme implements JsonSerializable 
{
  /**
   * @var string the name of the model as represented on the front-end.
   */
  protected $name;

  // More code here.

  /**
   * @return string a JSON representation of this class
   */
  public function jsonSerialize()
  {
      return [
        'name' => $this->getName()
      ];
  }
}

Wenn Sie es etwas komplexer machen möchten, können Sie dies tun :

<?php

class Acme implements JsonSerializable 
{
  /**
   * @var string the name of the model as represented on the front-end.
   */
  protected $name;

  /**
   * @var array an array of features about this object.
   */
  protected $features;

  // More code here.

  /**
   * @return string a JSON representation of this class
   */
  public function jsonSerialize()
  {
      return [
        'name' => $this->getName(),
        'features' => [
          'hair' => $this->getHairColor(),
          'eyes' => $this->getEyeColor(),
         ],
      ];
  }
}

Und wenn Sie alles daran setzen wollten, die Eigenschaften zu serialisieren, können Sie eine Schleife implementieren, um ein Array zu erstellen :

<?php

class Acme implements JsonSerializable 
{
  /**
   * @var string the name of the model as represented on the front-end.
   */
  protected $name;

  /**
   * @var array an array of features about this object.
   */
  protected $features;

  // More code here.

  /**
   * @return string a JSON representation of this class
   */
  public function jsonSerialize()
  {
      $objectArray = [];
      foreach ($this as $key => $value) {
          $objectArray[$key] = $value;
      }

      return $objectArray;
  }
}

Was auch immer der Fall ist, wenn eine Instanz der Klasse an die Funktion json_encode übergeben wird, ruft sie die Funktion jsonSerialize für das Objekt auf, sodass Sie die Darstellung des Objekts im JSON-Format erhalten, wie Sie es entworfen haben.

Dies ist unglaublich einfach und hilfreich, wenn es darum geht, Daten über mehrere Plattformen (oder sogar dieselbe Plattform) bereitzustellen.

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