# SOAP Question re: Class Mapping & Constructors

- Thread: https://externals.io/message/21204
- Original archive: https://news-web.php.net/php.internals/21204
- Started by Matt Friedman on 2005-12-13T18:48:39+00:00
- Messages: 6
- Reply by email to internals@lists.php.net
- More for agents: search with https://externals.io/search.md?q={query} · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

---

## #21204 — Matt Friedman — 2005-12-13T18:48:39+00:00

URL: https://externals.io/message/21204#21204

Hi,

We are using the built-in SOAP extension.

From the docs:
$server = new SoapClient("books.wsdl", array('classmap' =>
array('book' => "MyBook")));

Soap server will return a complex data type 'book'.  The data fields
for book will be mapped to the php class' data fields in MyBook. It
seems that the constructor for MyBook is never called (according to
our tests). The data fields are mapped somehow internally.

If I want MyBook to be much more than just a data container, then I
can foresee that I will often want/need a constructor but __construct
is not called.

Could this be considered a bug? Any thoughts?

--
-- Matt Friedman

---

## #21206 — Dmitry Stogov — 2005-12-13T19:04:02+00:00

URL: https://externals.io/message/21204#21206 · In reply to: #21204

Hi Matt,

During SOAP envelope deserialization, objects are created indirectly.
So constructors are not called (constructor may need arguments).

This is not a bug.

Thanks. Dmitry.

> -----Original Message-----
> From: Matt Friedman [mailto:matt.friedman@gmail.com] 
> Sent: Tuesday, December 13, 2005 9:49 PM
> To: internals@lists.php.net
> Subject: [PHP-DEV] SOAP Question re: Class Mapping & Constructors
> 
> 
> Hi,
> 
> We are using the built-in SOAP extension.
> 
> From the docs:
> $server = new SoapClient("books.wsdl", array('classmap' => 
> array('book' => "MyBook")));
> 
> Soap server will return a complex data type 'book'.  The data 
> fields for book will be mapped to the php class' data fields 
> in MyBook. It seems that the constructor for MyBook is never 
> called (according to our tests). The data fields are mapped 
> somehow internally.
> 
> If I want MyBook to be much more than just a data container, 
> then I can foresee that I will often want/need a constructor 
> but __construct is not called.
> 
> Could this be considered a bug? Any thoughts?
> 
> --
> -- Matt Friedman

---

## #21207 — Matt Friedman — 2005-12-13T19:22:25+00:00

URL: https://externals.io/message/21204#21207 · In reply to: #21206

Hi Dmitry,

It is understandable that you don't know what the arguments might be.
But I would rather have the constructor called with no arguments, or
with just the std object `book` passed to the constructor instead of
no constructor at all.

Is it possible?

Thanks,
Matt.




> Hi Matt,
>
> During SOAP envelope deserialization, objects are created indirectly.
> So constructors are not called (constructor may need arguments).
>
> This is not a bug.
>
> Thanks. Dmitry.
>
> > […]
>
> --
> 
> 
>
>


--
-- Matt Friedman

---

## #21209 — Andrew Yochum — 2005-12-13T21:33:38+00:00

URL: https://externals.io/message/21204#21209 · In reply to: #21207

Hi Matt & Dmitry,

Calling the magic __wakeup() func might be appropriate in this case,
since SOAP envelope deserialization is a lot like regular
deserialization.  It is a lot less confusing than calling the
constructor w/ no args and seems quite appropriate given the context.

Andrew


> Hi Dmitry,
> 
> It is understandable that you don't know what the arguments might be.
> But I would rather have the constructor called with no arguments, or
> with just the std object `book` passed to the constructor instead of
> no constructor at all.
> 
> Is it possible?
> 
> Thanks,
> Matt.
> 
> 
> 
> 
> > […]
> 
> 
> --
> -- Matt Friedman
> 
> --
> 
> 
> 

-- 
Andrew Yochum
Plexpod
andrew@plexpod.com
718-360-0879

---

## #21210 — Matt Friedman — 2005-12-13T21:46:20+00:00

URL: https://externals.io/message/21204#21210 · In reply to: #21209

That sounds very good.

Many thanks for the assistance.

Matt.


> Hi Matt & Dmitry,
>
> Calling the magic __wakeup() func might be appropriate in this case,
> since SOAP envelope deserialization is a lot like regular
> deserialization.  It is a lot less confusing than calling the
> constructor w/ no args and seems quite appropriate given the context.
>
> Andrew
>
> 
> > […]
>
> --
> Andrew Yochum
> Plexpod
> andrew@plexpod.com
> 718-360-0879
>


--
-- Matt Friedman

---

## #21212 — Adam Maccabee Trachtenberg — 2005-12-14T01:22:55+00:00

URL: https://externals.io/message/21204#21212 · In reply to: #21209

I would like to second this suggestion. I have been playing with the
classmap option and could use the ability to manipulate the object
after instantiation but before it's returned to the user.

-adam



> Hi Matt & Dmitry,
>
> Calling the magic __wakeup() func might be appropriate in this case,
> since SOAP envelope deserialization is a lot like regular
> deserialization.  It is a lot less confusing than calling the
> constructor w/ no args and seems quite appropriate given the context.
>
> Andrew
>
> 
> > […]
>
>

-- 
adam@trachtenberg.com | http://www.trachtenberg.com
author of o'reilly's "upgrading to php 5" and "php cookbook"
avoid the holiday rush, buy your copies today!
