Вызов другого сервисного компонента
В примере ConvertedStockQuote также вызывает прокси для двух компонентов, к которым он относится.
Пример #1 Вызов сервисов
<?php
$quote = $this->stock_quote->getQuote($ticker);
$rate = $this->exchange_rate->getRate($currency);
?>
Вызов сервиса StockQuote - это вызов локального сервиса; Вызов сервиса ExchangeRate - это вызов удаленного сервиса. Обратите внимание, что синтаксис вызова сервисов абсолютно идентичен.
Прокси гарантируют, что способ обращения к компонентам и их поведение одинаковы независимо от того, являются ли они локальным или удаленным сервисом. Поэтому компоненты не чувствительны к тому, является ли вызов локальным или удаленным. К примеру, прокси для локального сервиса делает копии переданных аргументов и передает сервису именно эти копии, чтобы гарантировать передачу по значению и обеспечить идентичность поведения локальных и удаленных вызовов. Кроме того, прокси для удаленной службы принимает аргументы из списка позиционных параметров и гарантирует, что они правильно упакованы в запросе SOAP и преобразуются обратно в список позиционных параметров на целевом сервисе.
В приведенном выше примере $ticker и $ currency являются скалярными типами PHP. Компоненты могут передавать скалярные типы PHP string, integer, float и boolean, но структуры данных в вызовах сервисов всегда передаются как SDO. В следующем разделе описывается, как компонент может создавать SDO для передачи вызова локальному или веб-сервису и как компонент может создать SDO для возврата результата. В документации по проекту PHP SDO описывается работа с интерфейсом API SDO (см. страницы SDO).