Итак, я сейчас пытаюсь реализовать внешний вызов API с помощью PHP SoapClient - и обнаружил, что он работает довольно странным образом.
Допустим, у меня есть следующий WSDLопределение:
<xs:element name="someParamList">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="someParam" type="someParam"/>
</xs:sequence>
</xs:complexType>
</xs:element>
, которое может возвращать либо:
<someParamList>
<someParam>foo</someParam>
<someParam>bar</someParam>
</someParamList>
, либо:
<someParamList>
<someParam>foo</someParam>
</someParamList>
Я сопоставил someParamList с SomeParamListClass
и someParam с SomeParamClass
используя атрибут classmap
.В целом это работает нормально, НО , в зависимости от результата, я не всегда получаю array
из SomeParamClass
.Если в списке только 1 результат, PHP будет непосредственно устанавливать объект вместо массива с одним объектом в нем.
Я пытался преобразовать данные в __construct
__set
или в обычный установщикно ни один из них не вызывается.
Итак: почему SoapClient действует так странно и почему он никогда не вызывает конструктор или сеттеры?И как мне получить согласованные списки?