Invocar a otro Componente de Servicio

El ejemplo ConvertedStockQuote también invoca a los delegados para los dos componentes a los que hace referencia.

Ejemplo #1 Llamar a servicios

<?php
$quote  
$this->stock_quote->getQuote($ticker);
$rate   $this->exchange_rate->getRate($currency);
?>

La llamada al servicio StockQuote es una llamada a un servicio local; la llamada al servicio ExchangeRate es una llamada a un servicio remoto. Observe que las llamadas se realizan de la misma manera, sin tener en cuenta si la llamada es a un servicio local o a uno remoto.

Los delegados que han sido inyectados se aseguran de que la manera de llamar a los componentes y el comportamiento sea el mismo, ya se trate de un servicio local o de uno remoto, por lo que los componentes no dependen de si una llamada es a un servicio local o a uno remoto. Por ejemplo, el delegado para un servicio local copia los argumentos y únicamente pasa esas copias, para asegurarse de que las llamadas sean por paso por valor, como lo harían para una llamada remota. También, el delegado para un servicio remoto toma los argumentos desde una lista de parámetros posicionales y se asegura de que están empaquetados apropiadamente en una petición SOAP y vueltos a convertir a una lista de parámetros posicionales al final de todo.

En el ejemplo de arriba, $ticker y $currency son claramente tipos escalares de PHP. Los componentes puede pasar los tipos escalares de PHP string, integer, float y boolean, pero las estructuras de datos sobre llamadas a servicios son siempre pasadas como Objetos de Datos de Servicio (SDOs). En un sección posterior se describe cómo un componente puede crear un SDO y pasarlo a una llamada a un servicio local o web, o cómo un componente puede crear un SDO para devolverlo. La documentación de proyecto SDO de PHP describe cómo trabajar con las APIs de SDO (véanse las páginas de SDO).