# はじめに

警告

この拡張モジュールは、 実験的 なものです。この拡張モジュールの動作・ 関数名・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 このモジュールは自己責任で使用してください。

SCA を使用すると、再利用可能なコンポーネントを PHP プログラマが書けるようになります。 このコンポーネントはさまざまな方法でコール可能ですし、 固有のインターフェイスを持っており、まったく手がかかりません。 現時点ではローカルあるいはウェブサービス経由でしか このコンポーネントをコールできませんが、将来はそれ以外の方法も可能になるでしょう。 これらの作業を、PHP プログラマが違和感なく行えるするようにする手段を提供しています。

SCA のコンポーネントは、phpDocumentor 形式 (http://www.phpdoc.org/ を参照ください) のアノテーション (注記) を用いて 他の SCA コンポーネントやウェブサービスとの依存性を宣言します。 SCA for PHP のランタイムは、これらの依存性をコンポーネントに代わって 実行時に解決します。したがって、プログラマは 依存性を解決するために参照を取得して配置したりすることよりも ビジネスロジックの作成に集中することができます。

SCA for PHP のプログラミングモデルは、さまざまな形式のサービス、 たとえば REST や Atompub などをサポートするように拡張することもできます。 しかし、現在指定できるのはウェブサービス (正確には WSDL で定義された SOAP/HTTP サービス) のみです。

これらのコンポーネントでは、 サービスが公開するインターフェイスを定義するアノテーションも使用します。 SCA for PHP のランタイムは、これらのアノテーションをもとにして WSDL を自動的に生成します。これを用いることで、SCA コンポーネントで簡単にウェブサービスを公開できるようになります。 これらのアノテーションは、phpDocumentor の記法を、 違和感なく拡張したものです。 ウェブサービスを公開する方法は簡単で、単に PHP コンポーネントをウェブサーバーのドキュメントルートに置くだけです。

これらのコンポーネントではまた、 データ構造 (XML スキーマの複合型を使用して表します) を指定するアノテーションも使用します。 このデータ構造を、Service Data Object (SDO) を用いて処理します。

SCA コンポーネントではなくアノテーションを含まない PHP スクリプトから、SCA コンポーネントのサービスを使用することができます。 また、PHP スクリプトやコンポーネントは、SCA コンポーネントでない ウェブサービスをコールすることもできます。しかし、 参照を取得するには、SCA コンポーネントと同じ形式のコール方法やアノテーションを使用します。

まず手始めに、ConvertedStockQuote という SCA コンポーネントをご覧に入れましょう。 これを用いて、SCA for PHP の多くの機能について説明します。 このコンポーネントはひとつのメソッド getQuote() を持っています。このメソッドは株式の "ティッカー" を指定して その株の株価を取得し、指定した通貨に変換します。 このドキュメントの残りの部分では、この例をもとにして SCA for PHP の機能を説明していきます。

例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;
}
}
?>`

この例では、PHP のクラスを含むスクリプトで SCA コンポーネントを実装しており、SCA.php をインクルードしています。このクラスは、ビジネスロジックと 他のコンポーネントやサービスへの参照を両方含んでいます。 getQuote() メソッドにはビジネスロジックしかありませんが、 このメソッドではインスタンス変数 $stock_quote および $exchange_rate を使用しています。 これらはそれぞれ別のコンポーネントを参照しており、 SCA のランタイムがこれら二つのサービスのプロキシを用いて初期化します。 これは、このコンポーネントが実行されるたびに行われます。 これらの二つのサービスのアノテーションからわかるように、 一方はローカルのコンポーネントで、同じ PHP ランタイムからコールします。 もう一方はリモートのコンポーネントで、SOAP リクエストでコールします。 このコンポーネントは getQuote() メソッドをローカルおよびウェブサービスの両方で公開しているので、 ローカルからもリモートからもコール可能です。