✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Сериализация классов WordPress с помощью PHP

27

Если вы привыкли работать с моделями (в любом фонде или фреймворке, но конкретно в WordPress), то есть шанс, что в какой-то момент вам может понадобиться сериализовать экземпляр модели.

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

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

Возможно, один из самых простых способов сделать это — использовать JSON. Это формат, который работает на разных языках и платформах, может быть легко сериализован и десериализован указанными платформами и отправлен по сети по мере необходимости.

И это невероятно легко реализовать на PHP. Вам просто нужно убедиться, что ваш класс реализует интерфейс JsonSerializable.

Сериализация классов WordPress с помощью PHP

Из документации интерфейс делает следующее:

Объекты, реализующие JsonSerializable, могут настраивать свое представление JSON при кодировании с помощью json_encode().

Единственный метод, который должен предоставить класс, — это jsonSerialize, и хотя, вероятно, вы захотите сериализовать все свойства объекта (а также его состояние при каждом вызове), вы можете настроить реализацию по своему усмотрению.

Например, если у вас есть класс, и вы просто хотите реализовать его свойство имени, вы должны реализовать такую ​​функцию :

<?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 для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее