{"id":230717,"date":"2022-12-12T14:30:00","date_gmt":"2022-12-12T11:30:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230717"},"modified":"2022-12-07T11:14:02","modified_gmt":"2022-12-07T08:14:02","slug":"recuperando-propiedades-de-espacio-de-nombres-en-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/recuperando-propiedades-de-espacio-de-nombres-en-php\/","title":{"rendered":"Recuperando propiedades de espacio de nombres en PHP"},"content":{"rendered":"\n<p>Cuando escribe suficiente c\u00f3digo que se comunica con las API de terceros, es muy probable que se encuentre comunic\u00e1ndose con una API basada en XML.<\/p>\n<p>Y diga lo que quiera al respecto: a algunos les gusta, a otros no. Pero existen y, por lo tanto, ser\u00e1n una parte necesaria de su desarrollo en alg\u00fan momento.<\/p>\n<p>Si la API est\u00e1 bien dise\u00f1ada, probablemente utilizar\u00e1 espacios de nombres para diferentes tipos de solicitudes y respuestas. Y cuando est\u00e9 escribiendo el cliente para dicha API, es probable que necesite recuperar las propiedades del espacio de nombres.<\/p>\n<p>Es f\u00e1cil hacerlo, pero no es inmediatamente obvio. Entonces, en esta publicaci\u00f3n, voy a mostrar un ejemplo de c\u00f3mo hacer exactamente eso.<\/p>\n<p>Para este ejemplo, suponga que estoy realizando una llamada a una API basada en XML. Para hacer eso, estoy usando la <strong><a href=\"https:\/\/github.com\/spatie\/array-to-xml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">biblioteca Array-To-XML de Spatie<\/a><\/strong> (que es extremadamente 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 propiedades de espacio de nombres en PHP\" ><\/a><\/p>\n<p>Para configurar la solicitud, la creo usando una matriz <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/8b97e2c98600cc15ea514416ab6e96ae#file-00-request-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como esta:<\/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>Luego usar\u00e9 el cliente API (que se ha resumido para que esta publicaci\u00f3n sea lo m\u00e1s breve posible) para realizar la solicitud desde la API. A partir de ah\u00ed, podemos tomar el contenido de la respuesta y hacer el trabajo que sea necesario (en este caso, iterar\u00e1 a trav\u00e9s de las propiedades de la respuesta).<\/p>\n<p>Y aqu\u00ed es donde entra en juego la recuperaci\u00f3n de las propiedades de los espacios de nombres. Suponiendo que necesitamos acceder a una sola propiedad, o a la propiedad de una propiedad, aqu\u00ed se explica c\u00f3mo hacerlo <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/8b97e2c98600cc15ea514416ab6e96ae#file-01-response-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">siempre que tenga un espacio de nombres:<\/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 resumen, las llaves sirven como &quot; <strong><a href=\"https:\/\/php.net\/manual\/en\/language.variables.variable.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">variables variables<\/a><\/strong> &quot; y nos dan acceso a la naturaleza din\u00e1mica de un 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 propiedades de espacio de nombres en PHP\" ><\/a><\/p>\n<p>Del manual:<\/p>\n<blockquote>\n<p>A veces es conveniente poder tener nombres de variables variables. Es decir, un nombre de variable que se puede establecer y utilizar din\u00e1micamente.<\/p>\n<\/blockquote>\n<p>Y debido a que es \u00fatil configurarlos din\u00e1micamente, es naturalmente \u00fatil recuperarlos din\u00e1micamente.<\/p>\n<p>Entonces, la pr\u00f3xima vez que trabaje con una API basada en XML (o quiz\u00e1s cualquier API), tenga en cuenta que puede configurar la recuperaci\u00f3n de las propiedades del espacio de nombres del objeto a trav\u00e9s de variables variables.<\/p>\n<p>Eso tiene sentido, \u00bfverdad?<\/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>Cuando est\u00e1 escribiendo un cliente para una API, es posible que deba recuperar las propiedades del espacio de nombres.<\/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":[892,716,800],"tags":[1172],"class_list":["post-230717","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-php-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230717","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=230717"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230717\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/236089"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230717"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230717"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}