Получение свойств пространства имен в PHP
Когда вы напишете достаточно кода, взаимодействующего со сторонними API, вы, скорее всего, обнаружите, что общаетесь с API на основе XML.
И говорите об этом что хотите: кому-то нравится, кому-то нет. Но они существуют, и, таким образом, в какой-то момент они станут необходимой частью вашего развития.
Если API хорошо спроектирован, он, скорее всего, будет использовать пространства имен для различных типов запросов и ответов. И когда вы пишете клиент для указанного API, вам, вероятно, потребуется получить свойства пространства имен.
Это легко сделать, но это не сразу очевидно. Итак, в этом посте я собираюсь рассмотреть пример того, как это сделать.
В этом примере предположим, что я вызываю API на основе XML. Для этого я использую библиотеку Array-To-XML от Spatie (очень удобно).
Чтобы настроить запрос, я создаю его, используя такой массив :
<?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);
Затем я воспользуюсь клиентом API (который был абстрагирован, чтобы сделать этот пост максимально кратким), чтобы сделать запрос из API. Оттуда мы можем взять содержимое ответа и выполнить любую необходимую работу (в данном случае это будет итерация по свойствам ответа).
И здесь в игру вступает получение свойств пространств имен. Предполагая, что нам нужно получить доступ к одному свойству или свойству свойства, вот как это сделать, когда оно находится в пространстве имен:
<?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...
}
Короче говоря, фигурные скобки служат «переменными переменными» и дают нам доступ к динамической природе объекта.
Из руководства:
Иногда удобно иметь переменные имена переменных. То есть имя переменной, которое можно задать и использовать динамически.
И поскольку полезно устанавливать их динамически, естественно, полезно и извлекать их динамически.
Так что в следующий раз, когда вы будете работать с API на основе XML (или, возможно, с любым API), обратите внимание, что вы можете настроить получение свойств объекта в пространстве имен через переменные-переменные.
Это имеет смысл, верно?

