По определению, мыльный клиент php возвращает объекты stdClass на основе используемых им типов xml определений / wsdl.Полученный объект stdClass обычно содержит все атрибуты, описанные в определении.Как вы можете видеть, есть атрибут minoccurs="0"
в определении атрибута additional_attributes
.Это означает, что это может произойти, но не должно.Таким образом, результат зависит от значений, полученных в ответе xml.
Чтобы избежать такого поведения, просто работайте с классами php, как в следующем примере.Мыльный клиент php принимает параметр classmap, который сообщает клиенту, какой сложный тип использовать с определенным классом.
Entity
class CatalogProductReturnEntity
{
...
public $additional_attributes;
...
}
Просто запишитекласс сущности со всеми свойствами, которые определены в определении xml.Этот класс может использоваться как объект для мыльного клиента.Использование этого класса сущности позволяет избежать уведомления PHP о том, что свойство не определено.
Мыльный клиент с картой классов
Следующий шаг - это сообщить мыльному клиенту, чтоклассы для использования со сложными типами.
$client = new \SoapClien($wsdl, [
'classmap' => [
'catalogProductReturnEntity' => CatalogProductReturnEntity::class,
],
]);
$product = $client->catalogProductInfo($sessionId, 38882);
Теперь клиент знает, какой класс использовать при получении сложного типа с именем catalogProductReturnEntity
.Поскольку наш класс сущностей имеет свойство с именем additional_attributes
, вы можете легко вызвать его с помощью $product->additiona_attributes
.Если не было получено значение для свойства additional_attributes
, оно будет равно null
.