これ以降の節の例では、PHP for SCA の次のような側面を説明します。
PHP のアノテーションを使用して PHP のクラスを SCA コンポーネントとして定義する方法、 そしてアノテーションを使用してサービスを定義する方法。
SCA コンポーネントをウェブサービスとして公開する方法。
SCA コンポーネントから別のウェブサービスを使用する方法。 使用するウェブサービスが別の SCA コンポーネントである場合と まったく SCA とは関係ないサービスである場合の両方を示します。
SCA コンポーネントから、ローカル (同一プロセス、同一コールスタック) の別の SCA コンポーネントをコールする方法。
SCA コンポーネントではないクライアントスクリプトが、 getService をコールして SCA コンポーネントのプロキシを使用する方法。
住所や発注データなどのデータ構造を Service Data Object で表現し、処理する方法。
SCA コンポーネントを配置する方法。特に、サービスの WSDL がいつどのように作成されるか。
コンポーネント間でのパラメータの受け渡しが、ローカルコールであっても (参照ではなく) 値渡しとなること。これにより、 コンポーネントの場所にかかわらずコール方法が同じになります。
サービスへの、位置指定によるパラメータをサポートする方法。 もとになる WSDL がドキュメントリテラルをラップしたもので、 通常は名前指定によるパラメータしかサポートしていない場合も含みます。
ビジネスロジックのエラーや実行時例外の処理方法
サービスコンポーネントは、クラスとして実装します。 サービスコンポーネントであることを示すために、@service アノテーションを使用します。SCA ランタイムは、 スクリプトのファイル名にもとづく規約でコンポーネント名を決定します。 したがって、クラス名とスクリプトのファイル名は同じにしておく必要があります。
PHP SCA コンポーネントは常にサービスを公開しています。 コンポーネントは、ウェブサービスへのリクエストの結果としてコールされるか スクリプト内の別のコンポーネントから直接コールされるかのいずれかの方法でしか起動しません。 このため、有効な PHP SCA コンポーネントは常に @service アノテーションを含んでおり、少なくともひとつの public メソッドを持っています。
各 SCA コンポーネントは、SCA.php をインクルードする必要があります。 ここには SCA クラスの定義が含まれているだけでなく、 スクリプトがコールされた際に実行される、 コンポーネントとして振舞うための PHP コードも含まれています。
もし別のファイルもインクルードするのなら、それは SCA.php をインクルードする前に行わなければなりません。 SCA.php の後で別のファイルをインクルードすると、 SCA ランタイムがクラスを処理する際に、 そのファイルの内容が処理されません。
以下の例で、これらすべての構造について説明します。
例1 SCA for PHP のコンポーネントの構造
<?php
// 何かをインクルードします
include "SCA/SCA.php";
/**
* @service
*/
class ConvertedStockQuote {
// インスタンス変数、ビジネスロジック、そして最低ひとつの public メソッドを含めます
}
?>