Re: Re: Complex Types problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ammarmar escribió:
Dnia 25-06-2007 o 09:44:54 "Dani Castaños" <danitao.mailists@gmail.com> napisał(a):

PHP CLIENT
==========
$subscriber = array( 'age'   => (Integer) 27
                   , 'email' => (String) 'foo@fake.es'
                   , '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 = "foo@fake.es";
$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']'

--
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Kernel Newbies]     [PHP Database]     [Yosemite]

  Powered by Linux