{"id":231316,"date":"2022-12-20T11:37:00","date_gmt":"2022-12-20T08:37:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231316"},"modified":"2022-12-07T10:10:42","modified_gmt":"2022-12-07T07:10:42","slug":"serialisation-de-classes-wordpress-avec-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/serialisation-de-classes-wordpress-avec-php\/","title":{"rendered":"S\u00e9rialisation de classes WordPress avec PHP"},"content":{"rendered":"\n<p>Si vous avez l&rsquo;habitude de travailler avec des mod\u00e8les (dans n&rsquo;importe quelle fondation ou framework, mais sp\u00e9cifiquement WordPress), il est possible que vous ayez besoin de s\u00e9rialiser une instance du mod\u00e8le \u00e0 un moment donn\u00e9.<\/p>\n<p>Bien s\u00fbr, \u00e9crire la classe dans une base de donn\u00e9es en utilisant les fonctions int\u00e9gr\u00e9es de PHP est assez simple ; cependant, il est important d&rsquo;introduire un peu de flexibilit\u00e9, en particulier en ce qui concerne sa mise \u00e0 disposition sur d&rsquo;autres plates-formes.<\/p>\n<p>Par exemple, disons que vous construisez une application sur WordPress qui va avoir un certain type d&rsquo;information unique repr\u00e9sent\u00e9e dans un mod\u00e8le. Le mod\u00e8le sera alors accessible via une application mobile via <a href=\"https:\/\/developer.wordpress.org\/rest-api\/#why-use-the-wordpress-rest-api\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">l&rsquo;API REST<\/a>.<\/p>\n<p>L&rsquo;un des moyens les plus simples d&rsquo;y parvenir est sans doute d&rsquo;utiliser JSON. C&rsquo;est un format qui fonctionne sur diff\u00e9rentes langues et plates-formes, qui peut \u00eatre facilement s\u00e9rialis\u00e9 et d\u00e9s\u00e9rialis\u00e9 par lesdites plates-formes, et envoy\u00e9 sur le r\u00e9seau selon les besoins.<\/p>\n<p>Et c&rsquo;est incroyablement facile \u00e0 impl\u00e9menter en PHP. Vous devez juste vous assurer que votre classe impl\u00e9mente l&rsquo; interface <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=\"S\u00e9rialisation de classes WordPress avec PHP\" ><\/a><\/p>\n<p>D&rsquo;apr\u00e8s la documentation, l&rsquo;interface effectue les op\u00e9rations suivantes\u00a0:<\/p>\n<blockquote>\n<p>Les objets impl\u00e9mentant JsonSerializable peuvent personnaliser leur repr\u00e9sentation JSON lorsqu&rsquo;ils sont encod\u00e9s avec json_encode().<\/p>\n<\/blockquote>\n<p>La seule m\u00e9thode qu&rsquo;une classe doit fournir est <strong>jsonSerialize<\/strong>, et bien qu&rsquo;il soit probable que vous souhaitiez s\u00e9rialiser toutes les propri\u00e9t\u00e9s d&rsquo;un objet (ainsi que son \u00e9tat chaque fois qu&rsquo;il est appel\u00e9), vous pouvez personnaliser l&rsquo;impl\u00e9mentation comme vous le souhaitez.<\/p>\n<p>Par exemple, si vous avez une classe et que vous voulez juste impl\u00e9menter sa propri\u00e9t\u00e9 name, alors vous impl\u00e9menterez la fonction <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-00-name-property-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comme ceci<\/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 vous vouliez ajouter un peu plus de complexit\u00e9, alors vous <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-01-additional-properties-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pouvez faire ceci<\/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>Et si vous vouliez vous lancer dans la s\u00e9rialisation des propri\u00e9t\u00e9s, vous pouvez impl\u00e9menter <a href=\"https:\/\/gist.github.com\/tommcfarlin\/e87e029f8e28ec9681996761f06d7347#file-02-acme-serializable-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">une boucle pour construire un tableau<\/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>Quel que soit le cas, lorsqu&rsquo;une instance de la classe est transmise \u00e0 la\u00a0 fonction <strong>json_encode<\/strong>, elle invoquera la\u00a0 fonction <strong>jsonSerialize<\/strong> sur l&rsquo;objet afin que vous obteniez la repr\u00e9sentation de l&rsquo;objet au format JSON tel que vous l&rsquo;avez con\u00e7u.<\/p>\n<p>C&rsquo;est incroyablement facile et utile lorsqu&rsquo;il s&rsquo;agit de fournir des donn\u00e9es d&rsquo;utilisation sur plusieurs plates-formes (ou m\u00eame sur <a href=\"https:\/\/secure.php.net\/manual\/en\/function.json-decode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la m\u00eame plate<\/a> -forme, d&rsquo;ailleurs).<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En utilisant l&rsquo;interface JsonSerializable, ajouter la s\u00e9rialisation de classe WordPress est vraiment facile.<\/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":[801],"tags":[1167],"class_list":["post-231316","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231316","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=231316"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231316\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/236064"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231316"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231316"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231316"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}