✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Серіалізація класів WordPress за допомогою PHP

23

Якщо ви звикли працювати з моделями (у будь-якій основі чи фреймворку, але особливо в WordPress), то є шанс, що вам може знадобитися серіалізувати екземпляр моделі в якийсь момент.

Звичайно, записати клас у базу даних за допомогою вбудованих функцій PHP досить легко; однак, введення трохи гнучкості, особливо в тому, що стосується того, щоб зробити його доступним на інших платформах, є важливим.

Наприклад, скажімо, ви створюєте програму на WordPress, яка матиме певний тип унікальної інформації, представленої в моделі. Потім модель буде доступна через мобільний додаток через REST API.

Можливо, одним із найпростіших способів зробити це є використання JSON. Це формат, який працює на різних мовах і платформах, може бути легко серіалізований і десеріалізований зазначеними платформами та надісланий по дроту за потреби.

І це неймовірно легко реалізувати в PHP. Вам просто потрібно переконатися, що ваш клас реалізує інтерфейс JsonSerializable.

Серіалізація класів WordPress за допомогою PHP

Згідно з документацією, інтерфейс робить наступне:

Об’єкти, що реалізують JsonSerializable, можуть налаштовувати своє представлення JSON, коли кодуються за допомогою json_encode().

Єдиний метод, який має надати клас, — це jsonSerialize, і хоча ймовірно, що ви захочете серіалізувати всі властивості об’єкта (а також його стан під час кожного виклику), ви можете налаштувати реалізацію, як забажаєте.

Наприклад, якщо у вас є клас і ви просто хочете реалізувати його властивість name, тоді ви повинні реалізувати функцію так :

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

Якщо ви хочете додати йому трохи більше складності, ви можете зробити це :

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

І якщо ви хочете зробити все, щоб серіалізувати властивості, тоді ви можете реалізувати цикл для створення масиву :

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

У будь-якому випадку, коли екземпляр класу передається  функції json_encode, він викличе функцію jsonSerialize для об’єкта, щоб ви отримали представлення об’єкта у форматі JSON, як ви спроектували.

Це неймовірно легко та корисно, коли йдеться про використання даних на кількох платформах (або навіть на одній платформі, якщо на те пішло).

Джерело запису: tommcfarlin.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі