将对象数组从WCF传递到PHP-提取信息


Passing array of objects from WCF to PHP - extracting the info

我在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";
} 

谢谢你的回答。

使用$wsr->Person[$i]->Id

顺便说一句,使用"classmap"会使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对象的真实ARRAY。

我用相反的方法完成了这项工作,使用c#使用PHP Web服务,效果非常好。。。