Это расширение является ЭКСПЕРИМЕНТАЛЬНЫМ. Поведение этого расширения, включая имена его функций и любую другую относящуюся к нему документацию, может измениться в последующих версиях PHP без уведомления. Используйте это расширение на свой страх и риск.
SCA для PHP предназначено для облегчения создания переиспользуемых компонентов, обладающих унифицированным интерфейсом и различными моделями использования. В данный момент компоненты общаться либо локально, либо через веб-сервисы, но в будущем планируется расширить список способов доступа. В целом это расширение создавалось для облегчения жизни разработчика.
Компоненты SCA используют аннотации phpDocumentor (см. Http://www.phpdoc.org/) для инъекции зависимостей от других компонентов SCA или от веб-сервисов. Во время исполнения SCA самостоятельно разрешает эти зависимости, что позволяет разработчику сфокусироваться на бизнес-логике и не заниматься самостоятельным отслеживанием зависимостей.
В будущем SCA может быть дополнена поддержкой REST, Atompub и т.д. Но в настоящее время единственным поддерживаемым методом коммуникаций являются веб-сервисы (точнее, WSDL, SOAP / HTTP-сервисы).
Также компоненты используют аннотации для определения интерфейса предоставляемого ими сервиса. Во время исполнения из этих аннотаций SCA автоматически генерирует WSDL. Для разработчиков знакомых с phpDocumentor работа с аннотациями не доставит каких либо проблем. Развертывание веб-сервиса никогда небыло настолько простым - достаточно просто разместить компонент в корене документов веб-сервера.
Также компоненты используют аннотации для определения структур данных (определенных с помощью сложных типов схемы XML), обрабатываемых с использованием сервисных объектов данных (Service Data Objects или SDO).
PHP-скрипт, который не является компонентом SCA и не содержит аннотаций, может использовать службы компонента SCA. PHP-скрипт или компонент могут выполнять вызовы сторонних веб-сервисов, использующих ту же систему, но использует ту же систему вызовов или аннотаций для получения ссылки.
Для начала мы покажем простой компонент SCA с именем ConvertedStockQuote, который продемонстрирует различные возможности SCA. Он содержит один метод getQuote(), который будет по заданному названию искать котировки и конвертировать их в заданную валюту. Мы будем использовать этот пример в дальнейшем в описании функций для объяснения работы SCA.
Пример #1 Простой компонент SCA
<?php
include "SCA/SCA.php";
/**
* Вычисляем стоимость указанных акций в заданной валюте.
*
* @service
* @binding.soap
*/
class ConvertedStockQuote {
/**
* Сервис получения курсов конвертации валют.
*
* @reference
* @binding.php ../ExchangeRate/ExchangeRate.php
*/
public $exchange_rate;
/**
* Сервис получения котировок.
*
* @reference
* @binding.soap ../StockQuote/StockQuote.wsdl
*/
public $stock_quote;
/**
* Получение стоимости акции в заданной валюте.
*
* @param string $ticker Название акции.
* @param string $currency В какой валюте возвращать результат.
* @return float Стоимость акции в заданной валюте.
*/
function getQuote($ticker, $currency)
{
$quote = $this->stock_quote->getQuote($ticker);
$rate = $this->exchange_rate->getRate($currency);
return $rate * $quote;
}
}
?>
В этом примере показано, что компонент SCA реализован с помощью скрипта, в котором содержится описание класса и в который подключен скрипт SCA.php. Класс содержит смесь бизнес-логики и отсылок к другим компонентам и веб-сервисам. В методе getQuote() содержится только бизнес-логика, но она завязана на переменные класса $stock_quote и $exchange_rate. Тут наличествуют ссылки на два других компонента, которые будут проинициализированы SCA во время исполнения и проксированы на два конкретных сервиса, в независимости от того, где запускается этот компонент. Аннотации этих сервисов показывают, что один из них локальный - он будет запускаться в том же сеансе, что и наш PHP-скрипт, а второй удаленный и будет вызван с помощью SOAP-запроса. Также этот компонент предоставляет метод getQuote() в качестве сервиса, который может быть вызван как локально, так и удаленно.