将SOAP结构转换为php类

时间:2010-07-13 10:24:32

标签: php soap

如何转换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是字符串我怎么能用它作为对象?

2 个答案:

答案 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错误的真正来源,或者更糟糕的是,错误(想到错误的属性名称,拼写错误等)