Re: [SOAP] Re: Complex Types problem
[email protected] (Dani Castaños)
| Newsgroups | php.soap |
|---|---|
| Message-ID | <[email protected]> |
Ammarmar escribió: > 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! > Thank you very much! Yesterday I wast at home thinking about it, and I figure out the same solution. I was just reading carefully the error returned, and I get the '$subscriber->name' format instead of '$subscriber['name']'