Re: Complex Types problem

[email protected] (Ammarmar)
Newsgroups php.soap
Message-ID <[email protected]>
Dnia 25-06-2007 o 09:44:54 "Dani Castaños" <[email protected]>  
napisał(a):

> PHP CLIENT
> ==========
> $subscriber = array( 'age'   => (Integer) 27
>                    , 'email' => (String) '[email protected]'
>                    , 'name'  => (String) 'Dani'
>                    );
> ?>
>

Here you create ComplexType param as an array.

>
> PHP SERVER
> ==========
> function CreateSubscriber( $subscriber )
> {
>   $name  = $subscriber['name'];
>   $email = $subscriber['email'];
>   $age   = $subscriber['age'];
>    return 200;
> }//function CreateSubscriber( $name )

Here you try to access this ComplexType also as an array. Because you  
created it as an array, it seems logical to do so.

Well, it is not - ComplexType is in fact a counterpart of an object. While  
SOAPClient accepts arrays AND objects as a representation of ComplexType,  
SOAPServer will ALWAYS return object (specifically, StdClass object).

To access the name, email, etc, simply access fields of such object:

$name = $subscriber->name;
$email = $subscriber->email;
$age = $subscriber->age;

To be consistent, try to operate on objects on both sides (cliant and  
server).

E.g. on client side you would create subscriber like that:

$subscriber = new StdClass();
$subscriber->name = "Dani";
$subscriber->email = "[email protected]";
$subscriber->age = 27;

(StdClass is standard class for creating generic objects, provided by PHP)

It is easier to make a mistake when using arrays on client side  
(especially when ComplexTypes are more complex :-) )

Have fun!
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.