{"id":231096,"date":"2022-12-12T14:33:00","date_gmt":"2022-12-12T11:33:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231096"},"modified":"2022-12-07T11:14:10","modified_gmt":"2022-12-07T08:14:10","slug":"recuperando-propriedades-com-namespace-em-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/recuperando-propriedades-com-namespace-em-php\/","title":{"rendered":"Recuperando propriedades com namespace em PHP"},"content":{"rendered":"\n<p>Quando voc\u00ea escreve c\u00f3digo suficiente que se comunica com APIs de terceiros, \u00e9 mais do que prov\u00e1vel que voc\u00ea se encontre se comunicando com uma API baseada em XML.<\/p>\n<p>E diga o que quiser sobre isso: alguns gostam, outros n\u00e3o. Mas eles existem e, portanto, ser\u00e3o uma parte necess\u00e1ria do seu desenvolvimento em algum momento.<\/p>\n<p>Se a API for bem projetada, provavelmente usar\u00e1 namespaces para diferentes tipos de solicita\u00e7\u00f5es e respostas. E quando voc\u00ea estiver escrevendo o cliente para a referida API, provavelmente precisar\u00e1 recuperar propriedades com namespace.<\/p>\n<p>\u00c9 f\u00e1cil faz\u00ea-lo, mas n\u00e3o \u00e9 imediatamente \u00f3bvio. Ent\u00e3o, neste post, vou dar um exemplo de como fazer exatamente isso.<\/p>\n<p>Para este exemplo, suponha que estou fazendo uma chamada para uma API baseada em XML. Para fazer isso, estou usando a <strong><a href=\"https:\/\/github.com\/spatie\/array-to-xml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">biblioteca Array-To-XML da Spatie<\/a><\/strong> (que \u00e9 extremamente conveniente).<\/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=\"Recuperando propriedades com namespace em PHP\" ><\/a><\/p>\n<p>Para configurar a solicita\u00e7\u00e3o, eu a crio usando um array <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/8b97e2c98600cc15ea514416ab6e96ae#file-00-request-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como este:<\/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>Em seguida, usarei o cliente da API (que foi abstra\u00eddo para manter este post o mais sucinto poss\u00edvel) para fazer a solicita\u00e7\u00e3o da API. A partir da\u00ed, podemos pegar o conte\u00fado da resposta e fazer o trabalho necess\u00e1rio (neste caso, ser\u00e1 iterando pelas propriedades da resposta).<\/p>\n<p>E \u00e9 aqui que a recupera\u00e7\u00e3o de propriedades de namespaces entra em a\u00e7\u00e3o. Supondo que precisamos acessar uma \u00fanica propriedade, ou uma propriedade de uma propriedade, veja como faz\u00ea-lo <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/8b97e2c98600cc15ea514416ab6e96ae#file-01-response-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sempre que tiver namespace:<\/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>Em suma, as chaves servem como &#8221; <strong><a href=\"https:\/\/php.net\/manual\/en\/language.variables.variable.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vari\u00e1veis \u200b\u200bvari\u00e1veis<\/a><\/strong> &quot; e nos d\u00e3o acesso \u00e0 natureza din\u00e2mica de um objeto.<\/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=\"Recuperando propriedades com namespace em PHP\" ><\/a><\/p>\n<p>Do manual:<\/p>\n<blockquote>\n<p>\u00c0s vezes \u00e9 conveniente poder ter nomes de vari\u00e1veis \u200b\u200bvari\u00e1veis. Ou seja, um nome de vari\u00e1vel que pode ser definido e usado dinamicamente.<\/p>\n<\/blockquote>\n<p>E como \u00e9 \u00fatil configur\u00e1-los dinamicamente, \u00e9 naturalmente \u00fatil recuper\u00e1-los dinamicamente.<\/p>\n<p>Portanto, da pr\u00f3xima vez que voc\u00ea estiver trabalhando com uma API baseada em XML (ou talvez qualquer API), observe que voc\u00ea pode definir a recupera\u00e7\u00e3o de propriedades de namespace do objeto por meio de vari\u00e1veis \u200b\u200bvari\u00e1veis.<\/p>\n<p>Isso faz sentido, certo?<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ao escrever um cliente para uma API, talvez seja necess\u00e1rio recuperar propriedades com namespace.<\/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":[898,722,806],"tags":[1170],"class_list":["post-231096","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-php-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231096","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231096"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231096\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/236089"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}