2013-03-05 71 views
0

我正在嘗試使用基於SOAP的webservice uisng PHP。以下是示例代碼。我需要知道/學習如何訪問返回的對象元素? 請注意,我是新來的PHP如何從SOAP webservice使用PHP訪問返回的對象

$url = 'http://www.webservicex.net/uszip.asmx?WSDL'; 
    $soap = new SoapClient($url, array(
     "trace"  => 1,  // enable trace to view what is happening 
     "exceptions" => 0,  // disable exceptions 
     "cache_wsdl" => 0)); 
    try { 
     $result = $soap->GetInfoByZIP(array('USZip' => '97219')); 

     echo($result->$CITY); 
     //print_r($soap->GetInfoByZIP(array("USZip" => "97219"))); 
    } catch (SoapFault $e) { 
     echo "Error: {$e->faultstring}"; 
    } 

我得到下面的異常

Notice: Undefined variable: CITY 

Fatal error: Cannot access empty property 

然而,當我執行註釋行上面它返回以下響應

stdClass Object 
(
    [GetInfoByZIPResult] => stdClass Object 
     (
      [any] => <NewDataSet xmlns=""><Table><CITY>Portland</CITY><STATE>OR</STATE><ZIP>97219</ZIP><AREA_CODE>503</AREA_CODE><TIME_ZONE>P</TIME_ZONE></Table></NewDataSet> 
     ) 

) 

因此,這意味着該數據正在返回,但我無法像訪問.NET一樣訪問它。

任何人都可以請幫助我如何訪問PHP中的這個對象,爲什麼?

回答

0

首先,我們使用$ CITY變量來訪問$ result屬性,但您尚未定義它。

所以,如果你想獲得「結果」對象中的「城市」屬性,你應該通過「$ result->城市」來做到這一點。

根據你得到的結果 - 它是一個xml字符串,而不是對象。如果您要訪問字符串做這種方式:

$result->GetInfoByZIPResult->any 

可以加載字符串的DomDocument或simplexml的庫。

+0

感謝您的幫助! 它顯然工作,但當我試圖打印出對象它preints空白:/但是當我打印對象作爲XML它顯示我的數據。需要知道如何引用對象的屬性:) 以下是代碼 $ obj = simplexml_load_string($ result-> GetInfoByZIPResult-> any); echo $ obj-> asXML(); – Salman 2013-03-05 17:03:04

+0

如果您成功將XML字符串轉換爲對象,則可以像訪問該對象一樣簡單地訪問它的屬性:$ obj-> Table-> City。 是的 - 傾銷這樣的對象有不同的行爲從usuall。 – 2013-03-06 09:17:04

+0

讓我知道如果你需要任何額外的幫助:) – 2013-03-07 11:36:16

相關問題