Recuperando propiedades de espacio de nombres en PHP
Cuando escribe suficiente código que se comunica con las API de terceros, es muy probable que se encuentre comunicándose con una API basada en XML.
Y diga lo que quiera al respecto: a algunos les gusta, a otros no. Pero existen y, por lo tanto, serán una parte necesaria de su desarrollo en algún momento.
Si la API está bien diseñada, probablemente utilizará espacios de nombres para diferentes tipos de solicitudes y respuestas. Y cuando esté escribiendo el cliente para dicha API, es probable que necesite recuperar las propiedades del espacio de nombres.
Es fácil hacerlo, pero no es inmediatamente obvio. Entonces, en esta publicación, voy a mostrar un ejemplo de cómo hacer exactamente eso.
Para este ejemplo, suponga que estoy realizando una llamada a una API basada en XML. Para hacer eso, estoy usando la biblioteca Array-To-XML de Spatie (que es extremadamente conveniente).
Para configurar la solicitud, la creo usando una matriz como esta:
<?php
// Setup the XML to connect to the API endpoint.
$namespaceExampleGetIDs = [
'Version' => $this->version,
'ApiKey' => $this->getPrivateKey(),
'acmePasscode' => $this->getPasscode(),
'Call' => [
'_attributes' => ['Method' => 'Namesepace.Example.GetIDs'],
'Date' => $this->getTimestamp(),
],
];
$xml = ArrayToXml::convert($namespaceExampleGetIDs, 'Acme', false);
Luego usaré el cliente API (que se ha resumido para que esta publicación sea lo más breve posible) para realizar la solicitud desde la API. A partir de ahí, podemos tomar el contenido de la respuesta y hacer el trabajo que sea necesario (en este caso, iterará a través de las propiedades de la respuesta).
Y aquí es donde entra en juego la recuperación de las propiedades de los espacios de nombres. Suponiendo que necesitamos acceder a una sola propiedad, o a la propiedad de una propiedad, aquí se explica cómo hacerlo siempre que tenga un espacio de nombres:
<?php
// Now make a request to the server.
$response = $this->makePostRequest($xml);
$xmlResponse = new SimpleXMLElement($response->getBody()->getContents());
// Iterate through all of the event IDs to get the information about them.
$events = [];
foreach ($xmlResponse->{'Namesepace.Example.GetIDs'}->EventID as $eventId) {
// Work with the $eventId however necessary...
}
En resumen, las llaves sirven como " variables variables " y nos dan acceso a la naturaleza dinámica de un objeto.
Del manual:
A veces es conveniente poder tener nombres de variables variables. Es decir, un nombre de variable que se puede establecer y utilizar dinámicamente.
Y debido a que es útil configurarlos dinámicamente, es naturalmente útil recuperarlos dinámicamente.
Entonces, la próxima vez que trabaje con una API basada en XML (o quizás cualquier API), tenga en cuenta que puede configurar la recuperación de las propiedades del espacio de nombres del objeto a través de variables variables.
Eso tiene sentido, ¿verdad?

