NuSOAP笔记:如何创建复杂数据类型

PHP已经有了内置的SOAP扩展,但是它不具备自动生成WSDL的能力,所以很多时候,NuSOAP还是有一定诱惑力的。

在应用稍微复杂点的时候,单靠integer, string等简单数据类型是不能满足需要的,这时候,就需要创建复杂数据类型,下面看看在NuSOAP中应该怎么做:

假设我们的应用里有一个“Member”对象,它有id,username,还有friends,直观一点表示,可能是类似下面的结构:

Array
(
    [id] => ...
    [username] => ...
    [friends] => Array
        (
            [0] => Array
                (
                    [id] => ...
                    [username] => ...
                    [friends] => Array(...)
                )

            [1] => Array
                (
                    [id] => ...
                    [username] => ...
                    [friends] => Array(...)
                )
        )
)

这里稍显复杂的地方就是有一点点递归的味道。下面看看用NuSOAP是如何表示这个数据类型的:

$nusoap->wsdl->addComplexType(
    ‘Members‘,
    ‘complexType‘,
    ‘array‘,
    ‘‘,
    ‘SOAP-ENC:Array‘,
    array(),
    array(
        array(
            ‘ref‘ => ‘SOAP-ENC:arrayType‘,
            ‘wsdl:arrayType‘ => ‘tns:Member[]‘
        )
    ),
    ‘tns:Member‘
);

$nusoap->wsdl->addComplexType(
    ‘Member‘,
    ‘complexType‘,
    ‘struct‘,
    ‘all‘,
    ‘‘,
    array(
        ‘id‘ => array(‘name‘ => ‘id‘ , ‘type‘ => ‘xsd:integer‘),
        ‘username‘ => array(‘name‘ => ‘username‘, ‘type‘ => ‘xsd:string‘),
        ‘friends‘ => array(‘name‘ => ‘friends‘ , ‘type‘ => ‘tns:Members‘)
    )
);

如果使用的是PHP内建的SOAP扩展的话,应该怎么创建复杂数据类型呢?答案很简单:手写WSDL创建复杂数据类型!因为PHP内建的SOAP扩展不支 持动态生成WSDL,所以只能手写,当然,如果你不了解WSDL规范,也可以先用NuSOAP生成一套,然后用到PHP内建的SOAP扩展中,^_^。

NuSOAP笔记:如何创建复杂数据类型

时间: 2024-10-18 14:20:59

NuSOAP笔记:如何创建复杂数据类型的相关文章

Mysql学习笔记(二)数据类型 补充

原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与varchar char与varchar的类型相似,但是他们的保存方式和检索方式不同... char的存储结构是固定长度的存储...即指定了几个字节,那么就占用几个字节,如char(4),那么无论存入的是什么字串,那么都占用四个字节...char的 可表示长度范围为0-255的任何值,当保存的字节不

Python学习笔记(一)--数据类型

数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型.在Python中,能够直接处理的数据类型有以下几种: 一.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十

Effective Java 读书笔记(2创建和销毁对象)

第一章是引言,所以这里不做笔记,总结一下书中第一章的主要内容是向我们解释了这本书所做的事情:指导Java程序员如何编写出清晰.正确.可用.健壮.灵活和可维护的程序. 2.1考虑用静态工厂方法代替构造器 静态工厂方法与构造器相比有四大优势: (1)静态工厂方法有名称,具有适当名称的静态工厂方法易于使用.易于阅读: (2)不必每次在调用它们的时候都创建一个新的对象: (3)可以返回原返回类型的任何子类型的对象: (4)在创建参数化类型实例的时候,它们使代码变得更加简洁. 同时静态工厂方法也有两大缺点

springmvc学习笔记---idea创建springmvc项目

前言: 真的是很久没搞java的web服务开发了, 最近一次搞还是读研的时候, 想来感慨万千. 英雄没落, Eclipse的盟主地位隐隐然有被IntelliJ IDEA超越的趋势. Spring从2.x到现在4.x, 一眨眼已是二代的积淀. 本文想借助Idea, 来简单搭建一个基于springmvc的web程序, 一为体验, 二为技术积累. 环境配置: idea版本为14.0.2, tomcat版本为8.0.23, idea创建的springmvc为4.1.1.RELEASE. 网上有很多图文并

Sharepoint2013搜索学习笔记之创建搜索服务(二)

第一步,进入管理中心,点击管理服务器上的服务 第二步,在服务器上选择需要承载搜索服务的服务器,并启动服务列表上的sharepoint server search 第三步,从管理中心进入管理服务应用程序 第四步,新建search service application 第五步,在弹出的新建窗口分别填好相应信息点击确定,主要注意的是 应用程序池可以选择已经有的,也可以自己填一个新的名称,选择填写新的之后,程序会在稍后新建一个应用程序池,一般推荐新建应用程序池. 默认情况,爬网组件会用配置好的搜索服务

《BI项目笔记》创建标准维度、维度自定义层次结构

原文:<BI项目笔记>创建标准维度.维度自定义层次结构

《BI项目笔记》创建多维数据集Cube(2)

原文:<BI项目笔记>创建多维数据集Cube(2) 本节建立: 历年的初烟水分均值变化分析Cube:区域维度:地州,专县时间维度:年等级维度:大等级,小等级指标:水分均值 数据源视图: 数据处理: ALTER TABLE T_QualMoisture_Middle ALTER COLUMN V_Produce_ID VARCHAR(50) ALTER TABLE T_QualMoisture_Middle ALTER COLUMN V_Batch_ID VARCHAR(50) DELETE F

《BI项目笔记》创建时间维度(1)

原文:<BI项目笔记>创建时间维度(1) SSAS Date 维度基本上在所有的 Cube 设计过程中都存在,很难见到没有时间维度的 OLAP 数据库.但是根据不同的项目需求, Date 维度的设计可能不大相同,所以在设计时间维度的时候需要搞清楚几个问题: 你的业务涉及到的最低的细节级别是什么?比如按季度查看报表还是按月份,或者按周,或者再甚者按天.这个细节级别需要弄清楚,比如在一些销售数据统计,有的时候可能更多按季度或者按月来查看报表.但在有的监控一些机器运行数据的统计,可能会按照小时或者分

《BI项目笔记》创建多维数据集Cube(1)

原文:<BI项目笔记>创建多维数据集Cube(1) 有两个事实表,因此就有两个度量值组,并且向导将为非维度键的事实表中的每一个数值列创建一个度量值.由于我们这里不需要那么多,所以只选择部分度量值.另外要注意,度量值的名称源于事实表中的列,所有名称由可能相同.但是在多维数据集中,由于度量值的名称必须是唯一的,所以向导会在重复的度量值名称后添加所属的度量值组名称. 下一步的时候多维数据集的向导识别了度量值组即之前的事实表与之相关的维度表,因此这里全部会显示出来. 为多维数据集取一个名称并保存. 历