Передача массива объектов из WCF в PHP - извлечение информации - PullRequest
2 голосов
/ 07 января 2012

У меня есть метод в службе CF 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";
} 

Спасибо за ваши ответы.

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Использование $wsr->Person[$i]->Id и т. Д.

0 голосов
/ 07 января 2012

Только примечание: использование "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"
        )
    )
);

То, что из этого получится, - это возможность получить реальный Массив ЧЕЛОВЕКА.

Я сделал это обратным способом, используя веб-сервис PHP с c #, и он творит чудеса ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...