PHP & Web Service[初级]
时间:2006-11-25
来源:互联网
废话不多说,WebService这个热啊,PHP这个火啊,想用PHP开发WebService是理所当然的事。什么?不懂WebService?没事,百度一下就知道了。啊?看不懂?不懂也没关系,直接看大少爷写的吧:)
大少爷是个激进分子,喜欢直接拿代码说事,不过在把可怜的读者弄得一头雾水之前,还是先大致说一下本文的目的。本文不打算讲述WebService的概念,也不打算讲那些复杂的协议内容。本文只是要让大家看看对于WebService,PHP可以做些什么,怎么做,有什么要注意的。
如果你刚才听了大少爷的查了百度,或者你以前查过,你应该已经大概知道了WebService的用处。通过WebService,我们可以调用部署在其他地方的程序,而不用care被调用的程序是在什么平台用什么语言编写的。也许你听说过GoogleAPI、YahooAPI什么的,大少爷虽然没有挨个调查过,但知道至少google是遵照标准的Web Service实现的,google用的是java,我们这里将使用PHP。
开始:Hello Word!
先来看代码:
PHP代码:
<?php
/**
* 实现业务逻辑的类,此类是一个普通类
*
*/
class Basic {
/**
* 返回一个字符串:Hello World!
*
* @return string
*/
public function returnString(){
return "Hello World!";
}
}
?>
PHP代码:
<?php
/**
* Web Service的Server端,包含类文件。
*/
require_once("Basic.php");
/**
* 创建Server对象
*/
$arrOptions = array('uri'=>'http://example.com/'); //设置命名空间
$objSoapServer = new SoapServer(null,$arrOptions);
/**
* 注册Basic类的所有方法
*/
$objSoapServer->setClass("Basic");
/**
* 处理请求
*/
$objSoapServer->handle();
?>
好了,我们要编写客户端访问这个WebService。
PHP代码:
<?php
/**
* Client端,首先创建Client对象
*/
$arrOptions = array('uri'=>'http://example.com/', //设置命名空间
'location'=>'http://url/to/our/webservice', //设置Server地址
'trace'=>true);
$objSoapClient = new SoapClient(null,$arrOptions);
/**
* 远程调用
*/
try{
$strReturn = $objSoapClient->returnString();
}catch(Exception $e){
}
/**
* 打印结果
*/
echo $strReturn;
?>
不论是SoapServer还是SoapClient,都接收两个参数,其中第二个参数是Option,它支持若干选项,这里我们用到的有:
- uri:命名空间,客户端和服务端需要使用相同的命名空间
- location:客户端用,用来指定服务端程序的访问地址,也就是本例第二段代码的程序地址。
- trace:客户端用,为true时可以获取服务端和客户端通信的内容,以供调试。
如果你按照大少爷说的进行了尝试,你会发现,基本上服务端返回什么数据类型,客户端可以接收到什么数据类型,但是当服务端返回对象时,客户端接收到的是一个stdClass对象,并且其属性的可见性并非按照服务端定义的,而是全部的public。
有经验的读者可能会问,如果客户端和服务端的编码不同怎么办?在Option中,有一个选项encoding,可以在客户端和服务端使用,用以指定文字的编码。比如你的服务端是gbk编码的,客户端是utf8编码的,就分别在服务端和客户端填入gbk和utf8。注意,此选项不会更改客户端和服务端通信内容的编码(它永远是utf8的),而只是在两端接受到通信内容后进行编码转换。
好了,第一个例子讲完了,应该不难。不过,这只是最基础的东西而已,我们知道PHP是弱类型的语言,对于强类型的语言来说(C、C++、Java),他们怎么识别PHP返回的数据类型呢?请继续往下看。
。。。未完待续
[ 本帖最后由 sandysong 于 2006-11-24 18:07 编辑 ]
作者: sandysong 发布时间: 2006-11-24
看 IP 才知道是你...:)
作者: Phzzy 发布时间: 2006-11-24
作者: cator 发布时间: 2006-11-24
作者: MySQL 发布时间: 2006-11-25
作者: Nickboy 发布时间: 2006-11-26
作者: sanler 发布时间: 2007-05-28
作者: 木�^ 发布时间: 2007-05-28
作者: niohe 发布时间: 2007-05-28
作者: qqsheji 发布时间: 2007-12-10

作者: luzhou 发布时间: 2007-12-10

作者: luzhou 发布时间: 2007-12-10
问一下,如果要设置那个wsdl,那个wsdl怎么知道格式是什么样,我要怎么写这个wsdl文件,这个问题一直困扰着呀

作者: tqjs 发布时间: 2008-05-08
期待更新
作者: edwardhey 发布时间: 2008-05-08
PHP代码:
$objSoapClient->returnString();然后之前看到一个实例用client实例类调用someFunction这个方法我查手册半天没发现有这个方法
作者: tqjs 发布时间: 2008-05-08
作者: sunceenjoy 发布时间: 2008-05-08
作者: ainylp 发布时间: 2008-07-19
作者: EricHoo 发布时间: 2008-07-25

作者: quanhaier 发布时间: 2008-07-25
作者: xieaotian 发布时间: 2008-07-25
作者: dx_andy 发布时间: 2008-07-25
作者: 月黑风高 发布时间: 2008-07-25



作者: 清茶 发布时间: 2008-07-25
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28