✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

WordPress Klass Serialisering med PHP

21

Om du är van vid att arbeta med modeller (i valfri grund eller ramverk, men specifikt WordPress), så finns det en chans att du kan behöva serialisera en instans av modellen någon gång.

Visst, att skriva klassen till en databas med PHPs inbyggda funktioner är tillräckligt enkelt; Det är dock viktigt att införa lite flexibilitet, särskilt när det gäller att göra det tillgängligt på andra plattformar.

Låt oss till exempel säga att du bygger en applikation på WordPress som kommer att ha någon typ av unik information representerad i en modell. Modellen kommer sedan att vara tillgänglig via en mobilapplikation via REST API.

Förmodligen är ett av de enklaste sätten att få detta gjort att använda JSON. Det är ett format som fungerar över olika språk och plattformar, som enkelt kan serialiseras och avserialiseras av nämnda plattformar och skickas över tråden efter behov.

Och det är otroligt enkelt att implementera detta i PHP. Du behöver bara se till att din klass implementerar gränssnittet JsonSerializable.

WordPress Klass Serialisering med PHP

Från dokumentationen gör gränssnittet följande:

Objekt som implementerar JsonSerializable kan anpassa sin JSON-representation när de kodas med json_encode().

Den enda metoden en klass behöver tillhandahålla är jsonSerialize, och även om det är troligt att du vill serialisera alla egenskaper för ett objekt (liksom dess tillstånd närhelst det anropas), kan du anpassa implementeringen hur du vill.

Till exempel, om du har en klass och du bara vill implementera dess namnegenskap, då skulle du implementera funktionen så här :

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

Om du vill lägga till lite mer komplexitet till det kan du göra så här :

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

Och om du ville gå all in på att serialisera egenskaperna, kan du implementera en loop för att bygga en array :

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

Hur som helst, när en instans av klassen skickas till  funktionen json_encode, kommer den att  anropa funktionen jsonSerialize på objektet så att du får representationen av objektet i JSON-format som du har designat.

Detta är otroligt enkelt och användbart när det gäller att tillhandahålla data på flera plattformar (eller till och med samma plattform för den delen).

Inspelningskälla: tommcfarlin.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer