{"id":231414,"date":"2022-12-20T11:40:00","date_gmt":"2022-12-20T08:40:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231414"},"modified":"2022-12-07T10:10:41","modified_gmt":"2022-12-07T07:10:41","slug":"wordpress-luokan-sarjointi-php-llae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-luokan-sarjointi-php-llae\/","title":{"rendered":"WordPress-luokan sarjointi PHP:ll\u00e4"},"content":{"rendered":"\n<p>Jos olet tottunut ty\u00f6skentelem\u00e4\u00e4n mallien kanssa (mill\u00e4 tahansa perustalla tai kehyksell\u00e4, mutta erityisesti WordPressill\u00e4), on mahdollista, ett\u00e4 saatat joutua sarjottamaan mallin esiintym\u00e4n jossain vaiheessa.<\/p>\n<p>Toki luokan kirjoittaminen tietokantaan PHP:n sis\u00e4\u00e4nrakennetuilla funktioilla on riitt\u00e4v\u00e4n helppoa; On kuitenkin t\u00e4rke\u00e4\u00e4 lis\u00e4t\u00e4 hieman joustavuutta, varsinkin kun se liittyy sen saatavuuteen muilla alustoilla.<\/p>\n<p>Oletetaan esimerkiksi, ett\u00e4 rakennat WordPressiin sovellusta, jonka mallissa on jonkinlainen ainutlaatuinen tieto. Malli on sitten k\u00e4ytett\u00e4viss\u00e4 mobiilisovelluksen kautta <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> :n kautta .<\/p>\n<p>Luultavasti yksi helpoimmista tavoista saada t\u00e4m\u00e4 aikaan on k\u00e4ytt\u00e4\u00e4 JSONia. Se on muoto, joka toimii useilla eri kielill\u00e4 ja alustoilla, jonka mainitut alustat voivat helposti sarjottaa ja poistaa sarjoja ja l\u00e4hett\u00e4\u00e4 tarvittaessa.<\/p>\n<p>Ja t\u00e4m\u00e4 on uskomattoman helppoa toteuttaa PHP:ss\u00e4. Sinun tarvitsee vain varmistaa, ett\u00e4 luokkasi toteuttaa <a href=\"https:\/\/secure.php.net\/manual\/en\/class.jsonserializable.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">JsonSerializable-<\/a> liittym\u00e4n.<\/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-luokan sarjointi PHP:ll\u00e4\" ><\/a><\/p>\n<p>K\u00e4ytt\u00f6liittym\u00e4 tekee dokumentaation mukaan seuraavaa:<\/p>\n<blockquote>\n<p>JsonSerializablea toteuttavat objektit voivat mukauttaa JSON-esityst\u00e4\u00e4n, kun ne on koodattu json_encode(:lla).<\/p>\n<\/blockquote>\n<p>Ainoa menetelm\u00e4, jonka luokan tarvitsee tarjota, on <strong>jsonSerialize<\/strong>, ja vaikka on todenn\u00e4k\u00f6ist\u00e4, ett\u00e4 haluat sarjoittaa objektin kaikki ominaisuudet (sek\u00e4 sen tilan aina kun sit\u00e4 kutsutaan), voit mukauttaa toteutusta haluamallasi tavalla.<\/p>\n<p>Jos sinulla on esimerkiksi luokka ja haluat vain toteuttaa sen nimiominaisuuden, toteutat funktion <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-00-name-property-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seuraavasti<\/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>Jos haluat lis\u00e4t\u00e4 siihen hieman monimutkaisuutta, voit <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-01-additional-properties-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tehd\u00e4 t\u00e4m\u00e4n<\/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>Ja jos halusit panostaa ominaisuuksien sarjoittamiseen, voit toteuttaa <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-02-acme-serializable-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">silmukan taulukon rakentamiseksi<\/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>Joka tapauksessa, kun luokan esiintym\u00e4 v\u00e4litet\u00e4\u00e4n json_encode- <strong>funktiolle<\/strong>, se k\u00e4ynnist\u00e4\u00e4\u00a0 objektin <strong>jsonSerialize-<\/strong> funktion, jotta saat objektin esityksen JSON-muodossa suunnittelemallasi tavalla.<\/p>\n<p>T\u00e4m\u00e4 on uskomattoman helppoa ja hy\u00f6dyllist\u00e4, kun on kyse tietojen k\u00e4ytt\u00e4misest\u00e4 useilla alustoilla (tai jopa <a href=\"https:\/\/secure.php.net\/manual\/en\/function.json-decode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">samalla alustalla<\/a> ).<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>JsonSerializable Interface -liittym\u00e4n avulla WordPress-luokan serialisoinnin lis\u00e4\u00e4minen on todella helppoa.<\/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":[803],"tags":[1166],"class_list":["post-231414","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231414","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=231414"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231414\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/236064"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231414"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231414"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}