http://www.phpchina.com/html/21/t-12821.html
これ以上ナンセンスではありません。WebService が注目されており、PHP も注目されています。PHP を使用して WebService を開発したいと思うのは自然なことです。何? Webサービスを理解していませんか?大丈夫、Baidu はすぐにそれを認識します。ああ?読めない?理解できなくても問題ありません。若いマスターが書いたことを読んでください:)
若いマスターは急進的で、コードについて直接話すことを好みます。ただし、貧しい読者を混乱させる前に、簡単に説明しましょう。この記事の目的を説明します。この記事は、WebService の概念を説明することを目的としたものではなく、複雑なプロトコルの内容について説明することも目的ではありません。この記事は、WebService に対して PHP で何ができるのか、その方法、そして何に注意を払う必要があるのかを皆さんに見てもらうことを目的としています。
若旦那の話を聞いてBaiduをチェックしただけ、または以前チェックしたことがあるなら、WebServiceの使い方についてはすでに大まかなアイデアを持っているはずです。 WebService を使用すると、呼び出されたプログラムがどのようなプラットフォームや言語で記述されているかを気にせずに、他の場所にデプロイされたプログラムを呼び出すことができます。 Google API や Yahoo API などについて聞いたことがあるかもしれません。若旦那はそれぞれを調査したことはありませんが、少なくとも Google が Java を使用する標準の Web サービス実装に従っていることは知っており、ここでは PHP を使用します。
スタート: こんにちは Word!
まずコードを見てみましょう:
[php]/**
* ビジネスロジックを実装するクラス、このクラスは共通クラスです
*
*/
class Basic {
/**
* 文字列を返します: Hello World!*/
public function returnString () {
「」「」「」このプログラムがサーバー A 上にあると仮定します。若いマスターがサーバー B 上でこのプログラムを呼び出したい場合はどうすればよいでしょうか?まず、このクラスを Web サービスに変換する必要があります。これには、PHP の SOAP 拡張機能を使用する必要があります。この拡張機能のインストール方法については、PHP マニュアルを参照してください。インストール後、次のコードを確認してください。
[php]
/**
* Web サービスのサーバー側 (クラス ファイルを含む)。
*/
require_once("Basic.php");
* サーバーオブジェクトを作成する
*/
$arrOptions = array('uri'=>' http://example.com/'); // 名前空間を設定します
$objSoapServer = new SoapServer(null,$arrOptions);
$objSoapServer->setClass("Basic"); ;
/**
* Basicクラスの全メソッドを登録
*/
$objSoapServer->handle(); [/php]
上記の例では、SoapServer オブジェクトを作成しました。 setClass 関数を使用して、先ほど作成した Basic クラスを設定し、最後に handle() を実行します。今のところ、名前空間については心配しないでください。このファイルにブラウザでアクセスすると、警告が表示されます。ファイルはブラウザではなく別のプログラムでアクセスされているため、これは正常です。クライアント プログラムが WebService にアクセスすると、handle() の実行時にクライアントの入力が処理され、結果が各クライアントに出力されます。ここで、handle() の前後には何も出力しないでください。そうしないと、クライアントが処理できなくなります。
さて、この Web サービスにアクセスするクライアントを作成する必要があります。
[php]
/**
* リクエストの処理
*/
$arrOptions = array('uri'=>'http://example.com/', =>'http://url /to/webservice '、//サーバーアドレス
= $ strreturn = $ objsoapclient-> *
* クライアント、最初に Client オブジェクトを作成します
*/
echo $strReturn
?>
[/php]
上記のプログラムでは、まずSoapClientオブジェクトを作成し、サーバー側でBasicオブジェクトを使用するのと同じようにreturnStringメソッドを呼び出し、出力結果を出力します。この PHP をどのサーバーに配置しても、サーバーのネットワークに接続できる限り、期待する結果 (Hello World!) が得られます。
SoapServer と SoapClient はどちらも 2 つのパラメーターを受け取ります。2 番目のパラメーターは Option で、ここで使用するオプションは次のとおりです:
uri: 名前空間、クライアントとサーバーは同じ名前空間を使用する必要があります
location: によって使用されます。クライアントは、サーバー プログラムのアクセス アドレスを指定します。この例では、これが 2 番目のコードのプログラム アドレスです。
trace: クライアントによって使用されます。 true の場合、サーバーとクライアント間の通信の内容をデバッグのために取得できます。
最初のコードを展開し、さらに関数を入力して、返された整数、浮動小数点型、配列、オブジェクトがそれぞれどのようになるかを確認することもできます。また、クライアントからパラメーターを受け取り、それらを処理してみることもできます。または、SoapClient の関数を使用して、クライアントとサーバー間の通信内容を追跡します (これらの関数については、PHP ドキュメントを確認してください)。当面は、通信内容の意味をあまり気にする必要はありません。 。
若旦那の言ったことを試してみると、基本的にサーバーが返すデータ型、クライアントが受け取ることができるデータ型ですが、サーバーがオブジェクトを返すとき、クライアントは stdClass オブジェクトを受け取り、その可視性はわかります。そのプロパティはサーバーによって定義されていませんが、すべて公開されています。
経験豊富な読者は、クライアントとサーバーのエンコーディングが異なる場合はどうなるのかと疑問に思うかもしれません。 [オプション] には、クライアントとサーバーでテキストのエンコーディングを指定するために使用できるオプション エンコーディングがあります。たとえば、サーバーが gbk でエンコードされ、クライアントが utf8 でエンコードされている場合は、サーバーとクライアントにそれぞれ gbk と utf8 を入力します。このオプションは、クライアントとサーバー間の通信コンテンツのエンコーディングを変更するものではなく (常に utf8 になります)、両端で通信コンテンツを受信した後にエンコーディング変換を実行するだけであることに注意してください。
さて、最初の例は終わりました、難しくないはずです。ただし、これは PHP が弱い型指定言語であることはわかっていますが、強い型指定言語 (C、C++、Java) では、PHP によって返されるデータ型をどのように識別するのでしょうか