✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Serializacja klas WordPress z PHP

33

Jeśli jesteś przyzwyczajony do pracy z modelami (w dowolnym fundamencie lub frameworku, ale konkretnie WordPress), istnieje szansa, że ​​w pewnym momencie może zajść potrzeba serializacji wystąpienia modelu.

Jasne, napisanie klasy do bazy danych przy użyciu wbudowanych funkcji PHP jest dość łatwe; jednak wprowadzenie odrobiny elastyczności, zwłaszcza w odniesieniu do udostępniania na innych platformach, jest ważne.

Załóżmy na przykład, że tworzysz aplikację na WordPressie, która będzie zawierała pewien rodzaj unikalnych informacji reprezentowanych w modelu. Model będzie wówczas dostępny za pośrednictwem aplikacji mobilnej poprzez REST API.

Prawdopodobnie jednym z najłatwiejszych sposobów, aby to zrobić, jest użycie JSON. Jest to format, który działa w różnych językach i platformach, może być łatwo serializowany i deserializowany przez te platformy i przesyłany przez sieć w razie potrzeby.

Zaimplementowanie tego w PHP jest niezwykle łatwe. Musisz tylko upewnić się, że Twoja klasa implementuje interfejs JsonSerializable.

Serializacja klas WordPress z PHP

Z dokumentacji interfejs wykonuje następujące czynności:

Obiekty implementujące JsonSerializable mogą dostosować swoją reprezentację JSON po zakodowaniu za pomocą json_encode().

Jedyną metodą, którą klasa musi zapewnić, jest jsonSerialize i chociaż prawdopodobnie będziesz chciał serializować wszystkie właściwości obiektu (a także jego stan, gdy jest wywoływany), możesz dostosować implementację w dowolny sposób.

Na przykład, jeśli masz klasę i chcesz po prostu zaimplementować jej właściwość name, zaimplementujesz funkcję w ten sposób :

<?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()
      ];
  }
}

Jeśli chcesz dodać do tego trochę więcej złożoności, możesz to zrobić :

<?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(),
         ],
      ];
  }
}

A jeśli chcesz zająć się serializacją właściwości, możesz zaimplementować pętlę, aby zbudować tablicę :

<?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;
  }
}

Niezależnie od przypadku, gdy wystąpienie klasy zostanie przekazane do  funkcji json_encode, wywoła ona  funkcję jsonSerialize na obiekcie, aby uzyskać reprezentację obiektu w zaprojektowanym formacie JSON.

Jest to niezwykle łatwe i pomocne, jeśli chodzi o udostępnianie danych na wielu platformach (lub nawet na tej samej platformie ).

Źródło nagrywania: tommcfarlin.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów