注册函数的原型
function method_impl(string $method_name, array $params, array $user_data);
$method_name
公共方法名称,由调用客户端知道
$params
由调用客户端指定的参数
$user_data
任何本地数据,由 `xmlrpc_server_call_method` 传递
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
xmlrpc_server_register_method — 注册一个 PHP 函数到资源方法匹配 method_name
注册函数的原型
function method_impl(string $method_name, array $params, array $user_data);
$method_name
公共方法名称,由调用客户端知道
$params
由调用客户端指定的参数
$user_data
任何本地数据,由 `xmlrpc_server_call_method` 传递
请记住,如果您想添加来自静态类的的方法(因此您不能创建该类的任何实例),您不能像 Chrigu 和 Nate 所说那样做。
解决方法是创建调用
方法的 lambda 函数
// 我们的静态处理程序类
static class MyHandler
{
public function getPrice($item)
{
$prices = array("apple" => 4, "orange" => 5);
return $prices[$item];
}
public function buy($item, $number)
{
$price = self::getPrice($item) * $number;
do_thing_to_sell_the_item();
return $price;
}
}
// 使用反射获取方法名称和参数
$mirror = new ReflectionClass("MyHandler");
foreach ($mirror->getMethods() as $method)
{
// 为每个方法创建新的“lambda”函数
// 生成参数列表
$args = array();
foreach ($method->getParameters() as $param)
{
$args[] = '$'.$param->getName();
}
$args = implode(',', $args);
// 生成代码
$methodname = $method->getName();
$code = "return {$real_class}::{$methodname}({$args});";
// 创建函数,检索函数名称
$function_name = create_function($args, $code);
// 注册函数
xmlrpc_server_register_method($myserver, $methodname, $function_name);
}
这是一个关于如何注册类方法的示例
xml_rpc_server_register_methode($xmlrpc_server, "foo", array(&$bar, "foo_func"));
其中 $bar 是您的类的实例,而 foo_func 是该类的某个方法。不要忘记 “&”!
希望这可能有用...
Chrigu
为了让服务器以编程方式生成 xmlrpc 错误响应,注册为方法处理程序的 php 函数必须返回一个包含 FaultCode 和 FaultString 成员的数组。
function $myfunc($methodname, $vals, $extra_data)
{
...
return array('faultCode' => 666, 'faultString' => 'DOH!');
}
注意 1:即使您通过调用 `xmlrpc_server_register_introspection_callback` 或 `xmlrpc_server_add_introspection_data` 添加了内省数据,服务器也不会为您验证接收到的参数的数量或类型。
这意味着您必须在您的 php 函数中实现对接收到的参数的所有必要验证。
注意 2:注意处理接收到的参数中的 base64 和 datetime 值:这些值不会自动转换为 php 标量值,而是转换为具有 `xmlrpc_type` 和 `scalar` 成员的 stdClass 对象
要注册对同一类中的“静态”函数的回调,请考虑以下语法
<code>
$callback = array (__CLASS__, "my_function_name");
xmlrpc_server_register_method($xmlrpc_server, "my_function", $callback);
</code>
以这种方式操作可以更轻松地以后重命名您的类。
以防它没有完全清楚 Chrigu 的意思,
您可以通过以下操作在您的类中注册一个方法
xml_rpc_server_register_methode($xmlrpc_server, "myClientCall", array(&$this, "handleClientCallFunc"));
其中 $this == 魔法类 $this。=)