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

Posted

技术标签:

【中文标题】是否可以将元素名称映射到 php 类(SoapClient)【英文标题】:Is it possible to map element name to php class (SoapClient) 【发布时间】:2013-05-10 18:51:01 【问题描述】:

使用 SoapClient,是否可以将元素名称(而不是类型)映射到 php 类?

在php手册中:

http://www.php.net/manual/en/soapclient.soapclient.php

classmap 是这样定义的:

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】:

所以我误解了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');

【讨论】:

以上是关于是否可以将元素名称映射到 php 类(SoapClient)的主要内容,如果未能解决你的问题,请参考以下文章

数据类型映射:从当前元素导航到父元素名称

Sequelize - 将字段映射到模型定义中的字段别名

如何将 JSON 字段名称映射到不同的对象字段名称?

php 将表单名称作为数据属性添加到重力表单表单元素

有没有办法使用 Dapper 将列名映射到我的实体的属性?

是否可以获得@JsonProperty 的原始字段名称?