PHP には Web サービスを実装できる拡張機能が 2 つあり、1 つは NuSoap、もう 1 つは PHP の公式の SOAP 拡張機能です。SOAP 拡張機能は有効になっていないため、ここでは Web サービスを実装するために SOAP を使用します。デフォルトでは、最初に SOAP 拡張機能がオンになっているかどうかを確認します。
SOAP で Web サービスを記述するプロセスでは、SoapClient、SoapServer、SoapFault の 3 つのクラスが主に使用されます。
SoapClient クラス
このクラスは、Web サービスを使用するために使用されます。 SoapClient クラスは、特定の Web サービスのクライアントとして機能します。
これには 2 つの操作形式があります:
* WSDL スキーマ
* 非 WSDL モード
WSDL モードでは、コンストラクターは WSDL ファイル名をパラメーターとして受け取り、サービスで使用される情報を WSDL から抽出できます。
パラメーターは、非 WSDL モードで使用される情報を渡すために使用されます。
SoapServer クラス
このクラスは、Web サービスを提供するために使用できます。 SoapClient と同様に、SoapServer にも WSDL モードと非 WSDL モードという 2 つの動作モードがあります。これら 2 つのモードの意味は、SoapClient の 2 つのモードと同じです。 WSDL モードでは、サービスは WSDL によって提供されるインターフェイスを実装します。非 WSDL モードでは、サービスの動作を管理するためにパラメータが使用されます。
SoapServer クラスの多くのメソッドの中で、より重要なメソッドが 3 つあります。それらは、SoapServer::setClass()、SoapServer::addFunction()、および SoapServer::handle() です。
以下に例を示します:
サービスを提供する PHP クラスを定義します。このクラスが提供する関数は、Web サービス
によって提供されるサービスです。
1 php
2 クラス 人物情報
3 {
4 /**
5 * 名前を返します
6 * @return string
7 *
8 */
9 public function getName(){
10 戻る "私の名前はチャンス" ;
11 }
12 }
13 ?>
サーバー側のコードは以下のとおりです。
コード
1 php
2 //サービスを提供するクラスが含まれます
3 require_once('personInfo.php' );
4
5 //Web サービスは wsdl モードで提供されます。wsdl ファイルが生成された場合は、それをコンストラクターに直接渡すことができます。 //SoapServer
6 //$s = new SoapServer('PersonInfo.wsdl');
7
8 //機能しません 位置情報のみでは Web サービスを提供できません
9 //出力: XML ドキュメントが見つからないようです
10 //$s = new SoapServer(null,array("location"=>"http://localhost/Test/MyService/Server.php"));
11
12 //対応する uri
が指定されている限り、次の 2 つのメソッドは両方とも機能します
13 //$s = new SoapServer(null,array("uri"=>"Server.php"));
14 $s = 新規 SoapServer(null,array("location "=>"http://localhost/Test/MyService/Server.php"、"uri"=>"Server.php "));
15
16 $s -> setClass(" 人物情報");
17
18 $s -> handle();
19 ?>
クライアント コードは次のとおりです:
コード
1 php
2 try{
3 //wsdl 経由で Web サービスを呼び出す
4 //wsdl モードでは、wsdl ファイルが書き込まれているため、関数の追加や削除などの変更があった場合、非 wsdl モードに比べて反映されません。 > 5
//十分な柔軟性がありません 6
//$soap = new SoapClient("http://localhost/Test/MyService/PersonInfo. wsdl"); 7
8
//非 wsdl モードで Web サービスを呼び出す 9
//非 wsdl モードでは、オプションの場所を指定する必要がありますが、サーバー側の場所はオプションであり、指定できない場合があります 10
$soap = new SoapClient(null,array(' location '=>"http://localhost/Test/MyService/Server.php"、'uri'=>'サーバー。 php '));11
12
// 2 つの呼び出し方法、直接呼び出し方法、__soapCall による短縮呼び出し13
$result1 = $soap-> getName ();14
$result2 = $soap->__soapCall("getName",array());15
$result1. 「」";
16 エコー $ result2;
17
18 }キャッチ(SoapFault $e){
19 echo $e->getMessage();
20 } catch(例外 $e){
21 echo $e->getMessage();
22 }
23
24 ?>