是否可以将元素名称映射到php类(SoapClient)

时间:2013-05-16 02:13:01

标签: 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>

即。我想将元素M1Response映射到php类

我可以将N1Response映射到php类,但响应是这样的:

stdClass Object
(
    [N1Response] => MyPHPClassResponse Object
        (
            ...
        )
)

几乎违背了类图功能的目的。

任何帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:4)

所以我误解了types

的定义 以下示例中的

type R1Out

<xsd:element name="N1Response" type="bons0:R1Out"/>

事实上这是type

$options['classmap'] = array('M1Response' => 'MyPHPClassResponse');
$client = new SoapClient('test.wsdl', $options);
$client->__getTypes();

检查__getTypes()的输出显示确实存在与M1Response元素关联的类型:

struct M1Response {
    R1Out N1Response;
}

所以答案是(如上所述):

$options['classmap'] = array('M1Response' => 'MyPHPClassResponse');