第一种形式创建的是xmlrpc字符串值。第二种形式创建的是描述值和类型的值。第三种形式通过在数组之类的结构中组合其他xmlrpc值创建复杂的对象,例如:
<?php
$myarray=new xmlrpcval(array(new xmlrpcval("tom"),
new xmlrpcval("dick"),new xmlrpcval("harry")), "array");
$mystruct=new xmlrpcval(array(
"name" => new xmlrpcval("tom"),
"age" => new xmlrpcval(34, "int"),
"geek" => new xmlrpcval(1, "boolean")),"struct");
?>
|
应答对象是xmlrpcresp类型,通过调用客户对象的send方法获得。在服务器端,我们能通过如下方式创建xmlrpcresp类型的对象:
$resp=new xmlrpcresp($xmlrpcval);
|
而在客户端,则使用如下方法从应答获取xmlrpcval:
$xmlrpcval=$resp->value();
|
接下来我们就能用下面这种方式获取描述应答结果的php变量:
$scalarval=$val->scalarval();
|
对于复杂的数据类型,有两个函数非常有用,这两个函数都在xmlrpc.inc内:
$arr=xmlrpc_decode($xmlrpc_val);
|
该函数返回一个php数组,其中包含了xmlrpcval变量$xmlrpc_val之内的数据,这些数据已被转换成php本身具有的变量类型。
$xmlrpc_val=xmlrpc_encode($phpval);
|
该函数返回一个xmlrpcval类型的值,其中包含了$phpval描述的php数据。对于数组和结构,此方法能够进行递归分析。注意,这里不存在对非基本数据类型(如base-64数据,或日期-时间数据)的支持。
服务器端
利用xmlrpcs.inc提供的类编写服务非常简单。要创建一个服务,我们按照如下方式创建xmlrpc_server的实例:
<?php
$s=new xmlrpc_server( array("examples.myfunc" =>
array("function" => "foo")));
?>
|
传递给xmlrpc_server构造函数的是个联合数组的联合数组。过程“examples.myfunc”调用“foo”函数,由于这个原因foo被称为方法句柄。
编写方法句柄非常简单。下面是个方法句柄的骨架:
<?php
function foo ($params) {
global $xmlrpcerruser; // 引入用户错误代码值
// $params是个xmlrpcval对象的数组
if ($err) {
// 错误条件
return new xmlrpcresp(0, $xmlrpcerruser+1, // 用户错误1
"error!");
} else {
// 成功
return new xmlrpcresp(new xmlrpcval("fine!", "string"));
}
}
?>
|
能看到,程式检查了错误,如存在错误则返回错误(从$xmlrpcerruser+1开始);否则如果一切正常,则返回描述操作成功信息的xmlrpcresp。
(责任编辑:admin) |