我正在尝试为soap请求添加一些属性.上评分最高PHP.net评论(http://php.net/manual/en/soapvar.soapvar.php),并在这里和这里的SO都说着同样的事情:
$param = array(
"_" => 'value',
'attrName' => 'attributeName'
);
$p = new SoapVar($param, SOAP_ENC_OBJECT);
Run Code Online (Sandbox Code Playgroud)
应该回来
<param attrName="attributeName">value</param>
Run Code Online (Sandbox Code Playgroud)
哪个会很棒,除非我运行那段代码,我得到这个XML:
<param>
<_>value</_>
<attrName>attributeName</attrName>
</param>
Run Code Online (Sandbox Code Playgroud)
这显然是错的.当然,我不是世界上唯一遇到这个问题的人吗?自2011年以来,关于这一点功能的文档是否发生了变化?
考虑这个简单的代码片段:
<?php
# http://php.net/manual/en/soapvar.soapvar.php
$parm = array();
$parm[] = new SoapVar('123', XSD_STRING, null, null, 'customerNo' );
$parm[] = new SoapVar('THIS', XSD_STRING, null, null, 'selection' );
$parm[] = new SoapVar('THAT', XSD_STRING, null, null, 'selection' );
$out = new SoapVar($parm, SOAP_ENC_OBJECT);
var_dump($out);
?>
Run Code Online (Sandbox Code Playgroud)
在它的来源线程上,据称它会生成类似以下 XML 的内容:
<customerNo>123</customerNo>
<selection>THIS</selection>
<selection>THAT</selection>
Run Code Online (Sandbox Code Playgroud)
...但是,我唯一能看到的var_dump()是这样的:
object(SoapVar)#4 (2) {
["enc_type"]=>
int(301)
["enc_value"]=>
array(3) {
[0]=>
object(SoapVar)#1 (3) {
["enc_type"]=>
int(101)
["enc_value"]=>
string(3) "123"
["enc_name"]=>
string(10) "customerNo"
}
[1]=> ...
Run Code Online (Sandbox Code Playgroud)
如何在不调用实际远程 Web 服务的情况下获取 SoapVar 对象的预期 XML?