如何转换SOAP结构
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/service1/">
<xsd:complexType name="requestDescriptor">
<xsd:all>
<xsd:element name="x" type="xsd:string"></xsd:element>
<xsd:element name="xx" type="xsd:string"></xsd:element>
<xsd:element name="xxx" type="xsd:int"></xsd:element>
<xsd:element name="xxxx" type="xsd:string"></xsd:element>
<xsd:element name="xxxxx" type="xsd:string"></xsd:element>
</xsd:all>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
到一个php对象 如果我打电话
$soapC = new SoapClient("http://192.168.1.3/forga/tests/vodSoapWS.wsdl");
$ret = $soapC->__getTypes();
$x = $ret[0];
问题是$ x type是字符串我怎么能用它作为对象?
答案 0 :(得分:1)
我通过创建带有结构和调用
的类来解决这个问题$req = new RequestDescriptor();
$req->x="ar";
$req->xx="JSON";
$req->xxx="xxxxx";
$req->xxxx="-1";
$req->xxxxx="xwwx11";
$x = new SoapVar($req,SOAP_ENC_OBJECT);
$ret = $soapC->function($x);
但是有没有动态的方法呢???
答案 1 :(得分:0)
不是正确的随时可用的答案,但take a look at __get
and __set
"magic" methods重载。
在RequestDescriptor类中实现它们(或在较高级别实现它们的使用)将使您能够保持属性私有或受保护(因为它们应该在每个对象中)并控制可以设置哪些属性。 您还可以在将输入发送到WS
之前使用它来验证输入在你的答案代码中,给我带来的风险是你可以调用对象中的任何var可能是WS错误的真正来源,或者更糟糕的是,错误(想到错误的属性名称,拼写错误等)