Calling another Service Component
Calling another Service Component
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).