【问题标题】:Passing array of objects from WCF to PHP - extracting the info将对象数组从 WCF 传递到 PHP - 提取信息
【发布时间】:2012-01-06 20:22:36
【问题描述】:

我在 C# WCF 服务中有一个方法,它负责从数据库中提取信息,然后将该信息作为简单对象数组传递给 PHP 站点。

public class Person
{
    public int Id;
    public string Name;
    public string Lastname;
    public string Phone;
}
...
public Person[] GetPerson(){...}

由于我不是很擅长 PHP,我的问题是:如何从 PHP 端的数组中提取信息?我得到的最常见错误是:不能使用 stdClass 类型的对象作为数组。我尝试了很多不同的东西。简单的 PHP 代码片段:

<?php
$client = new SoapClient("http://localhost:62532/Service1.svc?wsdl");

$ws = $client->GetPerson();
$wsr = $ws->GetPersonResult;

for($i = 0; $i < count($wsr); $i++)
{
echo $wsr[$i]->Id . "\n";
echo $wsr[$i]->Name . "\n";
echo $wsr[$i]->Lastname . "\n";
echo $wsr[$i]->Phone . "\n";
} 
?>

不起作用。当我打电话时:

print_r($wsr);

检查我得到的方法返回的结果:

stdClass Object 
( [Person] => Array ( 
[0] => stdClass Object ( 
[Id] => 1 [Name] => John [Lastname] => Abc [Phone] => 759687364 ) 
[1] => stdClass Object ( 
[Id] => 2 [Name] => Joe [Lastname] => Def [Phone] => 487512654 ) 
[2] => stdClass Object ( 
[Id] => 3 [Name] => Mike [Lastname] => Ghi [Phone] => 874587918 ) 
[3] => stdClass Object ( 
[Id] => 5 [Name] => Nick [Lastname] => Jkl [Phone] => 000000000) 
) 
)

因此,根据结果,WCF 和 PHP 之间的整个数据交换工作正常,因为这些是正确的结果,但我不知道如何轻松(类似于我上面尝试过的内容...... ) 从返回的数组中访问它们。

我已经搜索了很多解决方案,但没有找到任何可行的方法。任何帮助将不胜感激,谢谢。

编辑:好的,所以解决方案是:

for($i = 0; $i < count($wsr->Person); $i++)
{
echo $wsr->Person[$i]->Id . "\n";
echo $wsr->Person[$i]->Name . "\n";
echo $wsr->Person[$i]->Lastname . "\n";
echo $wsr->Person[$i]->Phone . "\n";
} 

感谢您的回答。

【问题讨论】:

    标签: php arrays wcf object


    【解决方案1】:

    使用$wsr-&gt;Person[$i]-&gt;Id

    【讨论】:

      【解决方案2】:

      顺便说一句,使用“类映射”将使您的 SOAP 对象对应于 PHP 对象,否则创建一个“Person”类而不映射到它是没有用的。

      http://www.php.net/manual/en/soapclient.soapclient.php

      $server = new SoapClient(
          "http://localhost:62532/Service1.svc?wsdl", 
          array(
              'classmap' => array(
                  'person' => "person"
              )
          )
      );
      

      由此产生的结果是能够接收真实的 PERSON 对象数组。

      我已经通过使用 c# 使用 PHP webservice 以相反的方法完成了它,它可以创造奇迹......

      【讨论】:

        猜你喜欢
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多