在“创建服务端”方面,我对 Soap 比较陌生,因此请提前对我正在使用的任何术语表示歉意。
是否可以从使用 PHP 的 SoapServer 类设置的远程过程 Soap 服务返回 PHP 数组?
我有一个 WSDL(通过盲目遵循教程构建),部分看起来像这样
<message name='genericString'>
<part name='Result' type='xsd:string'/>
</message>
<message name='genericObject'>
<part name='Result' type='xsd:object'/>
</message>
<portType name='FtaPortType'>
<operation name='query'>
<input message='tns:genericString'/>
<output message='tns:genericObject'/>
</operation>
</portType>
我调用的 PHP 方法名为查询,看起来像这样
public function query($arg){
$object = new stdClass();
$object->testing = $arg;
return $object;
}
这让我可以打电话
$client = new SoapClient("http://example.com/my.wsdl");
$result = $client->query('This is a test');
结果转储看起来像
object(stdClass)[2]
public 'result' => string 'This is a test' (length=18)
我想从我的查询方法中返回一个原生 PHP 数组/集合。如果我更改我的查询方法以返回一个数组
public function query($arg) {
$object = array('test','again');
return $object;
}
它在客户端被序列化为一个对象。
object(stdClass)[2]
public 'item' =>
array
0 => string 'test' (length=4)
1 => string 'again' (length=5)
这是有道理的,因为我xsd:object
在我的 WSDL 中将 a 指定为 Result 类型。如果可能的话,我想返回一个未包含在 Object 中的原生 PHP 数组。我的直觉说有一个特定的 xsd:type 可以让我完成这个,但我不知道。我也会满足于将对象序列化为ArrayObject
.
不要阻止我学习 WSDL 的技术细节。我正在尝试掌握以下基本概念