{"id":231026,"date":"2022-12-20T11:46:00","date_gmt":"2022-12-20T08:46:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231026"},"modified":"2022-12-07T10:10:37","modified_gmt":"2022-12-07T07:10:37","slug":"serializacion-de-clases-de-wordpress-con-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/serializacion-de-clases-de-wordpress-con-php\/","title":{"rendered":"Serializaci\u00f3n de clases de WordPress con PHP"},"content":{"rendered":"\n<p>Si est\u00e1 acostumbrado a trabajar con modelos (en cualquier base o marco, pero espec\u00edficamente en WordPress), existe la posibilidad de que necesite serializar una instancia del modelo en alg\u00fan momento.<\/p>\n<p>Claro, escribir la clase en una base de datos usando las funciones integradas de PHP es bastante f\u00e1cil; sin embargo, es importante introducir un poco de flexibilidad, especialmente en lo que respecta a que est\u00e9 disponible en otras plataformas.<\/p>\n<p>Por ejemplo, supongamos que est\u00e1 creando una aplicaci\u00f3n en WordPress que tendr\u00e1 alg\u00fan tipo de informaci\u00f3n \u00fanica representada en un modelo. Luego se podr\u00e1 acceder al modelo a trav\u00e9s de una aplicaci\u00f3n m\u00f3vil a trav\u00e9s <a href=\"https:\/\/developer.wordpress.org\/rest-api\/#why-use-the-wordpress-rest-api\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">de la API REST<\/a>.<\/p>\n<p>Podr\u00eda decirse que una de las formas m\u00e1s f\u00e1ciles de hacer esto es usar JSON. Es un formato que funciona en varios idiomas y plataformas, que dichas plataformas pueden serializar y deserializar f\u00e1cilmente y enviar por cable seg\u00fan sea necesario.<\/p>\n<p>Y es incre\u00edblemente f\u00e1cil implementar esto en PHP. Solo necesita asegurarse de que su clase implemente la interfaz <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=\"Serializaci\u00f3n de clases de WordPress con PHP\" ><\/a><\/p>\n<p>De la documentaci\u00f3n, la interfaz hace lo siguiente:<\/p>\n<blockquote>\n<p>Los objetos que implementan JsonSerializable pueden personalizar su representaci\u00f3n JSON cuando se codifican con json_encode().<\/p>\n<\/blockquote>\n<p>El \u00fanico m\u00e9todo que debe proporcionar una clase es <strong>jsonSerialize<\/strong> y, aunque es probable que desee serializar todas las propiedades de un objeto (as\u00ed como su estado siempre que se llame), puede personalizar la implementaci\u00f3n como desee.<\/p>\n<p>Por ejemplo, si tiene una clase y solo desea implementar su propiedad de nombre, implementar\u00eda la funci\u00f3n <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-00-name-property-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">de esta manera<\/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>Si desea agregarle un poco m\u00e1s de complejidad, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-01-additional-properties-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">puede hacer esto<\/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>Y si desea participar en la serializaci\u00f3n de las propiedades, puede implementar <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-02-acme-serializable-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">un bucle para crear una matriz<\/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>Cualquiera que sea el caso, cuando una instancia de la clase se pasa a la\u00a0 funci\u00f3n <strong>json_encode<\/strong>, invocar\u00e1 la\u00a0 funci\u00f3n <strong>jsonSerialize<\/strong> en el objeto para que obtenga la representaci\u00f3n del objeto en formato JSON como lo dise\u00f1\u00f3.<\/p>\n<p>Esto es incre\u00edblemente f\u00e1cil y \u00fatil cuando se trata de proporcionar el uso de datos en m\u00faltiples plataformas (o incluso en <a href=\"https:\/\/secure.php.net\/manual\/en\/function.json-decode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la misma plataforma<\/a>, para el caso).<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Usando la interfaz JsonSerializable, agregar la serializaci\u00f3n de clases de WordPress es realmente f\u00e1cil.<\/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":[800],"tags":[1172],"class_list":["post-231026","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=231026"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231026\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/236064"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=231026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=231026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=231026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}