使用PHP将SOAP响应转换为STD对象

时间:2013-02-07 19:36:54

标签: php soap wsdl stdclass

我正在学习项目的SOAP,现在我已经了解了它的基础知识。不敢相信我以前从未尝试过这个。这很棒。但无论如何,对我的问题。

我已成功将我的请求的响应打印到Web浏览器,但我似乎无法将此响应转换为STD对象。

我一直在关注一个教程,并将其改编为不同的WDSL文件,以完全理解我在做什么。

这是我的PHP文件。

<?

//////////////////////////////////////
//
//  ABOUT:      This file will send a request to the WSDL file and return a result in the browser window
//  AUTHOR:     Brad Bird
//  DATE:       07/02/2013
//
//////////////////////////////////////

// Setup the SOAP Client options
$wsdl = "http://www.mobilefish.com/services/web_service/countries.php?wsdl";
$options = array(
    "trace" => 1,
    "exception" => 0
);

// Creates new instance of the SOAP Client
$client = new SoapClient($wsdl, $options);

// Return a set of information using one function
$countryCode = "af";
$values = $client->countryInfoByIana($countryCode);

// Prints the details of the request and response to the browser
print "<h2>SOAP Details</h2>";
print "<pre>";
print "<h3>Request</h3> " . htmlspecialchars($client->__getLastRequest()) . "<br />";
print "<h3>Response</h3> " . htmlspecialchars($client->__getLastResponse());
print "</pre>";

// Prints the request in XML format
$xml = $values->countryInfoByIanaResponse;

print "<h2>stdClass Object</h2>";
print "<pre>";
print_r($xml);
print "</pre>";

我试图从这里得到请求的这个WSDL文件就在这里。 http://www.mobilefish.com/services/web_service/countries.php?wsdl

由于某种原因,STD对象部分什么都没有显示。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

嗯,$ xml不是stdClass的对象,而是null$values但是。 $values->countryInfoByIanaResponse不存在。所有你有$值的是

: object(stdClass) = 
  ianacode: string = "af"
  countryname: string = "Afghanistan"
  latitude: double = 33.93911
  longitude: double = 67.709953

不确定你到底想要做什么 - 也许在$ client上调用一个方法而不是你的结果? 另外,检查一下error_reporting上的PHP手册,你会偶然发现这个注意事项:未定义的属性:print_r行中的stdClass :: $ countryInfoByIanaResponse。