den*_*zer 3 php xml wsdl soap-client
使用 SoapClient,是否可以将元素名称(而不是类型)映射到 php 类?
在 PHP 手册中:
http://www.php.net/manual/en/soapclient.soapclient.php
类映射定义如下:
classmap 选项可用于将某些 WSDL 类型映射到 PHP 类。此选项必须是一个数组,其中 WSDL 类型作为键,PHP 类的名称作为值。
如果元素没有类型,是否可以映射它?
例如。
<xsd:element name="M1Response">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="N1Response" type="bons0:R1Out"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Run Code Online (Sandbox Code Playgroud)
IE。我想将元素映射M1Response到 php 类
我可以映射N1Response到 php 类,但响应如下所示:
stdClass Object
(
[N1Response] => MyPHPClassResponse Object
(
...
)
)
Run Code Online (Sandbox Code Playgroud)
这几乎违背了类映射功能的目的。
任何帮助,将不胜感激。
谢谢
所以我误解了它的定义types
type不在以下 R1Out示例中:
<xsd:element name="N1Response" type="bons0:R1Out"/>
Run Code Online (Sandbox Code Playgroud)
事实上是这样的type:
$options['classmap'] = array('M1Response' => 'MyPHPClassResponse');
$client = new SoapClient('test.wsdl', $options);
$client->__getTypes();
Run Code Online (Sandbox Code Playgroud)
检查输出__getTypes()表明确实存在与 M1Response 元素关联的类型:
struct M1Response {
R1Out N1Response;
}
Run Code Online (Sandbox Code Playgroud)
所以答案是(如上所述):
$options['classmap'] = array('M1Response' => 'MyPHPClassResponse');
Run Code Online (Sandbox Code Playgroud)