{"id":231005,"date":"2022-12-12T14:34:00","date_gmt":"2022-12-12T11:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231005"},"modified":"2022-12-07T11:14:06","modified_gmt":"2022-12-07T08:14:06","slug":"recuperation-des-proprietes-despace-de-noms-en-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/recuperation-des-proprietes-despace-de-noms-en-php\/","title":{"rendered":"R\u00e9cup\u00e9ration des propri\u00e9t\u00e9s d&rsquo;espace de noms en PHP"},"content":{"rendered":"\n<p>Lorsque vous \u00e9crivez suffisamment de code qui communique avec des API tierces, vous allez tr\u00e8s probablement vous retrouver \u00e0 communiquer avec une API bas\u00e9e sur XML.<\/p>\n<p>Et dites ce que vous voulez: certains aiment, d&rsquo;autres pas. Mais ils existent, et ils vont donc \u00eatre une partie n\u00e9cessaire de votre d\u00e9veloppement \u00e0 un moment donn\u00e9.<\/p>\n<p>Si l&rsquo;API est bien con\u00e7ue, elle utilisera probablement des espaces de noms pour diff\u00e9rents types de demandes et de r\u00e9ponses. Et lorsque vous \u00e9crivez le client pour ladite API, vous devrez probablement r\u00e9cup\u00e9rer les propri\u00e9t\u00e9s d&rsquo;espace de noms.<\/p>\n<p>C&rsquo;est facile \u00e0 faire, mais ce n&rsquo;est pas imm\u00e9diatement \u00e9vident. Donc, dans cet article, je vais vous montrer un exemple de la fa\u00e7on de proc\u00e9der.<\/p>\n<p>Pour cet exemple, supposons que j&rsquo;appelle une API bas\u00e9e sur XML. Pour ce faire, j&rsquo;utilise la <strong><a href=\"https:\/\/github.com\/spatie\/array-to-xml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">biblioth\u00e8que Array-To-XML de Spatie<\/a><\/strong> (ce qui est extr\u00eamement pratique).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161843-61e72bb95137b.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-161843-61e72bb95137b.png\" alt=\"R\u00e9cup\u00e9ration des propri\u00e9t\u00e9s d&#039;espace de noms en PHP\" ><\/a><\/p>\n<p>Pour configurer la requ\u00eate, je la cr\u00e9e \u00e0 l&rsquo;aide d&rsquo;un tableau <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/8b97e2c98600cc15ea514416ab6e96ae#file-00-request-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comme celui-ci\u00a0:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/\/ Setup the XML to connect to the API endpoint.\n$namespaceExampleGetIDs = [\n    'Version' =&gt; $this-&gt;version,\n    'ApiKey' =&gt; $this-&gt;getPrivateKey(),\n    'acmePasscode' =&gt; $this-&gt;getPasscode(),\n    'Call' =&gt; [\n        '_attributes' =&gt; ['Method' =&gt; 'Namesepace.Example.GetIDs'],\n        'Date' =&gt; $this-&gt;getTimestamp(),\n    ],\n];\n$xml = ArrayToXml::convert($namespaceExampleGetIDs, 'Acme', false);\n<\/code><\/pre>\n<p>Ensuite, j&rsquo;utiliserai le client API (qui a \u00e9t\u00e9 r\u00e9sum\u00e9 pour que ce message soit aussi succinct que possible) pour effectuer la demande \u00e0 partir de l&rsquo;API. \u00c0 partir de l\u00e0, nous pouvons prendre le contenu de la r\u00e9ponse et faire tout le travail n\u00e9cessaire (dans ce cas, il s&rsquo;agira d&rsquo;it\u00e9rer \u00e0 travers les propri\u00e9t\u00e9s de la r\u00e9ponse).<\/p>\n<p>Et c&rsquo;est l\u00e0 que la r\u00e9cup\u00e9ration des propri\u00e9t\u00e9s des espaces de noms entre en jeu. En supposant que nous ayons besoin d&rsquo;acc\u00e9der \u00e0 une seule propri\u00e9t\u00e9, ou \u00e0 une propri\u00e9t\u00e9 d&rsquo;une propri\u00e9t\u00e9, voici comment le faire <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/8b97e2c98600cc15ea514416ab6e96ae#file-01-response-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">chaque fois qu&rsquo;il y a un espace de noms\u00a0:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/\/ Now make a request to the server.\n$response = $this-&gt;makePostRequest($xml);\n$xmlResponse = new SimpleXMLElement($response-&gt;getBody()-&gt;getContents());\n\n\/\/ Iterate through all of the event IDs to get the information about them.\n$events = [];\nforeach ($xmlResponse-&gt;{'Namesepace.Example.GetIDs'}-&gt;EventID as $eventId) {\n    \/\/ Work with the $eventId however necessary...\n}\n<\/code><\/pre>\n<p>En bref, les accolades servent de \u00ab<strong><a href=\"https:\/\/php.net\/manual\/en\/language.variables.variable.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00a0variables variables<\/a><\/strong>\u00a0\u00bb et nous donnent acc\u00e8s \u00e0 la nature dynamique d&rsquo;un objet.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161843-61e72bbe3fdf1.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-161843-61e72bbe3fdf1.png\" alt=\"R\u00e9cup\u00e9ration des propri\u00e9t\u00e9s d&#039;espace de noms en PHP\" ><\/a><\/p>\n<p>Du manuel\u00a0:<\/p>\n<blockquote>\n<p>Parfois, il est pratique de pouvoir avoir des noms de variables variables. C&rsquo;est-\u00e0-dire un nom de variable qui peut \u00eatre d\u00e9fini et utilis\u00e9 dynamiquement.<\/p>\n<\/blockquote>\n<p>Et parce qu&rsquo;il est utile de les d\u00e9finir dynamiquement, il est naturellement utile de les r\u00e9cup\u00e9rer dynamiquement.<\/p>\n<p>Ainsi, la prochaine fois que vous travaillerez avec une API bas\u00e9e sur XML (ou peut-\u00eatre n&rsquo;importe quelle API), notez que vous pouvez d\u00e9finir la r\u00e9cup\u00e9ration des propri\u00e9t\u00e9s d&rsquo;espace de noms de l&rsquo;objet via des variables variables.<\/p>\n<p>C&rsquo;est logique, non\u00a0?<\/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>Lorsque vous \u00e9crivez un client pour une API, vous devrez peut-\u00eatre r\u00e9cup\u00e9rer des propri\u00e9t\u00e9s d&rsquo;espace de noms.<\/p>\n","protected":false},"author":1,"featured_media":236089,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,801],"tags":[1167],"class_list":["post-231005","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-php-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231005","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=231005"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231005\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/236089"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}