Eirik Hoem has posted a tip for all of the PHP SOAP developers out there - a method for setting the xsi:type correctly for objects sent in the message.

I spent quite some time looking for info on how to specify the xsi:type for the objects, and I finally came across SoapVar. I created a base class which the SOAP classes extended. A method called pack is responsible for setting xsi:type.

In his example, he creates a BaseClass to work from and builds a createCustomer class on top of it, defining a setCustomer function inside. When the new Person is created, a new Customer is too complete with the correctly formatted type on the object.

The PHP Web Services blog has a helpful hint on getting a custom SOAP request all ready to go:

How do you get this [custom] XML to be output by the SoapClient?

Using the SoapVar method and a few newly created objects, making a custom structure is simple. It's just a matter of encoding the object and setting it with the base() method in the PHP SOAP extension. Check out the blog post for an example of both the custom XML and the code to produce it.