PHP简单SOAP应用
注意:要应用PHP的SOAP服务,需要开启SOAP扩展功能
一、服务器端
PHP的soap服务在服务器端添加端口可以采用传统函数、类和对象三种:
1) 传统函数
1 function soap_echo($echo) {
2 return 'ECHO: '.$echo;
3 }
4 class xxx {
5 function soap_server() {
6 $server = new SoapServer(null, array('uri' => 'http://xxxx')); // uri是为了定义SOAP名字空间,依据情况可随意定义
7 $server->addFunction('soap_echo'); // 添加服务端口,导入两个函数用数组array('func1','func2');导入所有函数用常量SOAP_FUNCTIONS_ALL
8 $server->handle(); // 处理soap请求
9 }
10 }
2) 类
1 class xxx {
2 function soap_echo($echo) {
3 return 'ECHO: '.$echo;
4 }
5 function soap_server() {
6 $server = new SoapServer(null, array('uri' => 'http://xxxx'));
7 $server->setClass(get_class($this)); // 将类公开成员全部添加为服务端口,这里就用本类
8 $server->handle();
9 }
10 }
3) 对象
对象跟类的实现类似,这里就不写了
二、客户端
1 class zzz {
2 function test_soap() {
3 $opt = array(
4 'location' => 'http://..../index.php?c=xxx&m=soap_server', // SOAP服务端的URL
5 'uri' => 'http://xxxx' // 命名空间要跟SOAP服务端保持一致
6 );
7 $client = new SoapClient(null, $opt);
8 $ret = $client->soap_echo('it is a test'); // 这是缩写形式,完整的是:$client->__soapCall('soap_echo', array('it is a test'))
9 exit($ret);
10 }
11 }
这里是以字符串作为参数的,用数组也是一样的,soap_echo得到的也将是数组
同时,soap_echo返回的也可以是数组,这样客户端得到的也将是一个数组