Basing the high level design around a set of modules is a good way to manage complexity and structure development (even more so that at the micro level) however
the PHP web app would simply query this interface through soap or curl
This introduces a lot of latency into the application. I'd suggest defining APIs but for any synchronously handled request, run as much of the code within a single thread as possible.
Sure, if you have to deal with multiple development languages, using an interface running over HTTP is a very pragmatic solution - but if you're developing the front end in PHP then by programming to an abstract PHP API (which may call Soap, Corba, or other stuff), you still have the option of reimplementing the backend in a different way later.
I'm not sure what you mean by messaging. If you're talking about asynchronous request processing, then you need to think about how to implement a subscriber in PHP. This is a complete can of worms - I've not seen a good message handling system written in PHP - but I've not seen a good scalable solution written in Java either - and that includes the products pimped by some major players in high end systems. Maybe one day I'll write one ;) in the meantime, you really want to keep your complex (and potentially less reliable) business logic running in a seperate thread from any sort of subscriber daemon - so an obvious way to do that is to expose the target as a web page and have the subscriber running as a daemon which simply picks up messages and calls web-based APIs.
You really don't want to base a synchronous system around messaging if your at all concerned about performance / reliability / scalability.
HTH
C.