Calling another Service Component
The ConvertedStockQuote example also calls the proxies for
the two components to which it refers.
Example #1 Calling services
<?php
$quote = $this->stock_quote->getQuote($ticker);
$rate = $this->exchange_rate->getRate($currency);
?>
The call to the StockQuote service is a call to a local service;
the call to the ExchangeRate service is a call to a remote service.
Note that the way the call is made looks the same regardless of
whether the call is to a local service or a remote one.
The proxies which have been injected ensure that the way calls
to components look and behave are the same way regardless of whether
they are to a local or remote service, so that components are not
sensitive to whether a call is to a local or a remote service. For
example, the proxy for a local service takes copies of the arguments
and passes only those copies, to ensure that calls are made to be
pass-by-value, as they would be for a remote call. Also, the proxy
for a remote service takes the arguments from a positional
parameter list and ensures they are packaged properly in a SOAP
request and converted back to a positional parameter list at the far
end.
In the example above, the
$ticker and
$currency are clearly PHP scalar types.
Components can pass the PHP scalar types string, integer, float and
boolean, but data structures on service calls are always passed as
Service Data Objects (SDOs). A later section describes how a
component can create an SDO to pass on a local or Web service call, or
how a component can create an SDO to return. The PHP SDO project
documentation describes how to work with the SDO APIs (see
the SDO pages.