✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Hämtar namnavgränsade egenskaper i PHP

26

När du skriver tillräckligt med kod som kommunicerar med tredjeparts-API:er, kommer du mer än troligt att hitta dig själv i att kommunicera med ett XML-baserat API.

Och säg vad du vill om det: Vissa gillar det, andra inte. Men de finns, och de kommer därför att bli en nödvändig del av din utveckling någon gång.

Om API:et är väldesignat kommer det sannolikt att använda namnutrymmen för olika typer av förfrågningar och svar. Och när du skriver klienten för nämnda API, kommer du sannolikt att behöva gå till väga för att hämta namnavgränsade egenskaper.

Det är lätt att göra det, men det är inte direkt uppenbart. Så i det här inlägget ska jag gå igenom ett exempel på hur man gör just det.

För det här exemplet, anta att jag ringer ett XML-baserat API. För att göra det använder jag Array-To-XML-biblioteket från Spatie (vilket är extremt bekvämt).

Hämtar namnavgränsade egenskaper i PHP

För att ställa in begäran skapar jag den med hjälp av en array så här:

<?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);

Sedan kommer jag att använda API-klienten (som har abstraherats för att hålla detta inlägg så kortfattat som möjligt) för att göra begäran från API:n. Därifrån kan vi ta innehållet i svaret och göra det arbete som krävs (i det här fallet kommer det att upprepas genom egenskaperna för svaret).

Och det är här att hämta namnutrymmesegenskaper kommer in i bilden. Om vi ​​antar att vi behöver få åtkomst till en enskild egendom, eller en egenskap för en egendom, gör du så här när den har ett namnområde:

<?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...
}

Kort sagt fungerar klammerparenteserna som " variable variabler " och ger oss tillgång till ett objekts dynamiska natur.

Hämtar namnavgränsade egenskaper i PHP

Från manualen:

Ibland är det bekvämt att kunna ha variabel variabelnamn. Det vill säga ett variabelnamn som kan ställas in och användas dynamiskt.

Och eftersom det är användbart att ställa in dem dynamiskt, är det naturligtvis bra att hämta dem dynamiskt.

Så nästa gång du arbetar med ett XML-baserat API (eller kanske vilket API som helst), notera att du kan ställa in dig på att hämta namnavgränsade egenskaper för objektet via variabelvariabler.

Det är vettigt, eller hur?

Inspelningskälla: tommcfarlin.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer