2010-07-13 59 views
0

我如何轉換SOAP結構像轉換SOAP結構,以PHP類

<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型是字符串我如何使用它作爲一個對象?

回答

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); 

,但有任何動態的方式做到這一點???類

0

沒有正確使用答案,但take a look at __get and __set "magic" methods超載。

在你的RequestDescriptor類(或上層使用它們來推廣它們的使用)中實現它們將使你能夠保持屬性私有或保護(因爲它們應該在每個對象中)並控制哪些可以設置。 你也可以用它來驗證輸入之前發送到WS

在你的答案的代碼中,我的風險是你可以調用對象的任何變種可能是一個真正的WS錯誤或更糟的錯誤,拼寫錯誤的屬性名稱,錯字等)

+0

該問題將鋼存在,因爲請求描述符會鋼不與連接結構var ..它返回作爲一個字符串,我需要解析(我認爲)獲取數據結構... – shereifhawary 2010-07-13 14:06:42

+0

你仍然必須使用SoapVar來編碼我猜對象 – Benoit 2010-07-15 07:54:24