{"id":231606,"date":"2022-12-20T11:16:00","date_gmt":"2022-12-20T08:16:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231606"},"modified":"2022-12-07T10:10:44","modified_gmt":"2022-12-07T07:10:44","slug":"serializzazione-di-classi-wordpress-con-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/serializzazione-di-classi-wordpress-con-php\/","title":{"rendered":"Serializzazione di classi WordPress con PHP"},"content":{"rendered":"\n<p>Se sei abituato a lavorare con i modelli (in qualsiasi base o framework, ma in particolare WordPress), \u00e8 possibile che tu debba serializzare un&#8217;istanza del modello a un certo punto.<\/p>\n<p>Certo, scrivere la classe su un database usando le funzioni integrate di PHP \u00e8 abbastanza facile; tuttavia, \u00e8 importante introdurre un po&#8217; di flessibilit\u00e0 soprattutto per quanto riguarda il renderlo disponibile su altre piattaforme.<\/p>\n<p>Ad esempio, supponiamo che tu stia creando un&#8217;applicazione su WordPress che avr\u00e0 un tipo di informazione univoca rappresentata in un modello. Il modello sar\u00e0 quindi accessibile tramite un&#8217;applicazione mobile tramite <a href=\"https:\/\/developer.wordpress.org\/rest-api\/#why-use-the-wordpress-rest-api\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">l&#8217;API REST<\/a>.<\/p>\n<p>Probabilmente, uno dei modi pi\u00f9 semplici per farlo \u00e8 usare JSON. \u00c8 un formato che funziona su vari linguaggi e piattaforme, pu\u00f2 essere facilmente serializzato e deserializzato da dette piattaforme e inviato via cavo secondo necessit\u00e0.<\/p>\n<p>Ed \u00e8 incredibilmente facile implementarlo in PHP. Devi solo assicurarti che la tua classe implementi l&#8217; interfaccia <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=\"Serializzazione di classi WordPress con PHP\" ><\/a><\/p>\n<p>Dalla documentazione, l&#8217;interfaccia esegue le seguenti operazioni:<\/p>\n<blockquote>\n<p>Gli oggetti che implementano JsonSerializable possono personalizzare la loro rappresentazione JSON quando codificati con json_encode().<\/p>\n<\/blockquote>\n<p>L&#8217;unico metodo che una classe deve fornire \u00e8 <strong>jsonSerialize<\/strong>, e sebbene sia probabile che tu voglia serializzare tutte le propriet\u00e0 di un oggetto (cos\u00ec come il suo stato ogni volta che viene chiamato), puoi personalizzare l&#8217;implementazione come preferisci.<\/p>\n<p>Ad esempio, se hai una classe e vuoi semplicemente implementare la sua propriet\u00e0 name, allora implementeresti la funzione in <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-00-name-property-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">questo modo<\/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>Se vuoi aggiungere un po &#8216;pi\u00f9 di complessit\u00e0, puoi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-01-additional-properties-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">farlo<\/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>E se vuoi puntare tutto sulla serializzazione delle propriet\u00e0, puoi implementare <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-02-acme-serializable-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">un ciclo per costruire un 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>In ogni caso, quando un&#8217;istanza della classe viene passata alla\u00a0 funzione <strong>json_encode<\/strong>, invocher\u00e0 la\u00a0 funzione <strong>jsonSerialize<\/strong> sull&#8217;oggetto in modo da ottenere la rappresentazione dell&#8217;oggetto in formato JSON come hai progettato.<\/p>\n<p>Questo \u00e8 incredibilmente facile e utile quando si tratta di fornire l&#8217;utilizzo di dati su pi\u00f9 piattaforme (o anche <a href=\"https:\/\/secure.php.net\/manual\/en\/function.json-decode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la stessa piattaforma<\/a>, se \u00e8 per questo).<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Utilizzando l&#8217;interfaccia JsonSerializable, aggiungere la serializzazione delle classi di WordPress \u00e8 davvero semplice.<\/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":[804],"tags":[1168],"class_list":["post-231606","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231606","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=231606"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231606\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/236064"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231606"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231606"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231606"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}