{"id":230819,"date":"2022-12-20T11:40:00","date_gmt":"2022-12-20T08:40:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230819"},"modified":"2022-12-07T10:10:49","modified_gmt":"2022-12-07T07:10:49","slug":"wordpress-klass-serialisering-med-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/wordpress-klass-serialisering-med-php\/","title":{"rendered":"WordPress Klass Serialisering med PHP"},"content":{"rendered":"\n<p>Om du \u00e4r van vid att arbeta med modeller (i valfri grund eller ramverk, men specifikt WordPress), s\u00e5 finns det en chans att du kan beh\u00f6va serialisera en instans av modellen n\u00e5gon g\u00e5ng.<\/p>\n<p>Visst, att skriva klassen till en databas med PHPs inbyggda funktioner \u00e4r tillr\u00e4ckligt enkelt; Det \u00e4r dock viktigt att inf\u00f6ra lite flexibilitet, s\u00e4rskilt n\u00e4r det g\u00e4ller att g\u00f6ra det tillg\u00e4ngligt p\u00e5 andra plattformar.<\/p>\n<p>L\u00e5t oss till exempel s\u00e4ga att du bygger en applikation p\u00e5 WordPress som kommer att ha n\u00e5gon typ av unik information representerad i en modell. Modellen kommer sedan att vara tillg\u00e4nglig via en mobilapplikation via <a href=\"https:\/\/developer.wordpress.org\/rest-api\/#why-use-the-wordpress-rest-api\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">REST API<\/a>.<\/p>\n<p>F\u00f6rmodligen \u00e4r ett av de enklaste s\u00e4tten att f\u00e5 detta gjort att anv\u00e4nda JSON. Det \u00e4r ett format som fungerar \u00f6ver olika spr\u00e5k och plattformar, som enkelt kan serialiseras och avserialiseras av n\u00e4mnda plattformar och skickas \u00f6ver tr\u00e5den efter behov.<\/p>\n<p>Och det \u00e4r otroligt enkelt att implementera detta i PHP. Du beh\u00f6ver bara se till att din klass implementerar gr\u00e4nssnittet <a href=\"https:\/\/secure.php.net\/manual\/en\/class.jsonserializable.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">JsonSerializable<\/a>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160816-61e71433d1015.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160816-61e71433d1015.png\" alt=\"WordPress Klass Serialisering med PHP\" ><\/a><\/p>\n<p>Fr\u00e5n dokumentationen g\u00f6r gr\u00e4nssnittet f\u00f6ljande:<\/p>\n<blockquote>\n<p>Objekt som implementerar JsonSerializable kan anpassa sin JSON-representation n\u00e4r de kodas med json_encode().<\/p>\n<\/blockquote>\n<p>Den enda metoden en klass beh\u00f6ver tillhandah\u00e5lla \u00e4r <strong>jsonSerialize<\/strong>, och \u00e4ven om det \u00e4r troligt att du vill serialisera alla egenskaper f\u00f6r ett objekt (liksom dess tillst\u00e5nd n\u00e4rhelst det anropas), kan du anpassa implementeringen hur du vill.<\/p>\n<p>Till exempel, om du har en klass och du bara vill implementera dess namnegenskap, d\u00e5 skulle du implementera funktionen <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-00-name-property-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\nclass Acme implements JsonSerializable \n{\n  \/**\n   * @var string the name of the model as represented on the front-end.\n   *\/\n  protected $name;\n\n  \/\/ More code here.\n\n  \/**\n   * @return string a JSON representation of this class\n   *\/\n  public function jsonSerialize()\n  {\n      return [\n        'name' =&gt; $this-&gt;getName()\n      ];\n  }\n}<\/code><\/pre>\n<p>Om du vill l\u00e4gga till lite mer komplexitet till det kan du <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-01-additional-properties-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">g\u00f6ra s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\nclass Acme implements JsonSerializable \n{\n  \/**\n   * @var string the name of the model as represented on the front-end.\n   *\/\n  protected $name;\n\n  \/**\n   * @var array an array of features about this object.\n   *\/\n  protected $features;\n\n  \/\/ More code here.\n\n  \/**\n   * @return string a JSON representation of this class\n   *\/\n  public function jsonSerialize()\n  {\n      return [\n        'name' =&gt; $this-&gt;getName(),\n        'features' =&gt; [\n          'hair' =&gt; $this-&gt;getHairColor(),\n          'eyes' =&gt; $this-&gt;getEyeColor(),\n         ],\n      ];\n  }\n}<\/code><\/pre>\n<p>Och om du ville g\u00e5 all in p\u00e5 att serialisera egenskaperna, kan du implementera <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-02-acme-serializable-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en loop f\u00f6r att bygga en array<\/a> :<\/p>\n<pre><code>&lt;?php\n\nclass Acme implements JsonSerializable \n{\n  \/**\n   * @var string the name of the model as represented on the front-end.\n   *\/\n  protected $name;\n\n  \/**\n   * @var array an array of features about this object.\n   *\/\n  protected $features;\n\n  \/\/ More code here.\n\n  \/**\n   * @return string a JSON representation of this class\n   *\/\n  public function jsonSerialize()\n  {\n      $objectArray = [];\n      foreach ($this as $key =&gt; $value) {\n          $objectArray[$key] = $value;\n      }\n\n      return $objectArray;\n  }\n}<\/code><\/pre>\n<p>Hur som helst, n\u00e4r en instans av klassen skickas till\u00a0 funktionen <strong>json_encode<\/strong>, kommer den att\u00a0 anropa funktionen <strong>jsonSerialize<\/strong> p\u00e5 objektet s\u00e5 att du f\u00e5r representationen av objektet i JSON-format som du har designat.<\/p>\n<p>Detta \u00e4r otroligt enkelt och anv\u00e4ndbart n\u00e4r det g\u00e4ller att tillhandah\u00e5lla data p\u00e5 flera plattformar (eller till och <a href=\"https:\/\/secure.php.net\/manual\/en\/function.json-decode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">med samma plattform<\/a> f\u00f6r den delen).<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Genom att anv\u00e4nda JsonSerializable Interface \u00e4r det verkligen enkelt att l\u00e4gga till WordPress-klasserialisering.<\/p>\n","protected":false},"author":1,"featured_media":236064,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[807],"tags":[1173],"class_list":["post-230819","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230819","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=230819"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230819\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/236064"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230819"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230819"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}