xmlrpc_server_register_method

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_server_register_method注册一个 PHP 函数到资源方法匹配 method_name

描述

xmlrpc_server_register_method(resource $server, string $method_name, string $function): bool
警告

此函数为实验性。此函数的行为、名称和周围文档可能会在 PHP 的未来版本中发生更改,恕不另行通知。使用此函数需自行承担风险。

警告

此函数目前尚未记录;仅提供其参数列表。

添加注释

用户贡献的注释 7 个注释

2
nyvsld at gmail dot com
18 年前
注册函数的原型

function method_impl(string $method_name, array $params, array $user_data);

$method_name
公共方法名称,由调用客户端知道
$params
由调用客户端指定的参数
$user_data
任何本地数据,由 `xmlrpc_server_call_method` 传递
2
eiriks at hollowmatrix dot com
19 年前
请记住,如果您想添加来自静态类的的方法(因此您不能创建该类的任何实例),您不能像 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);
}
2
Anonymous
21 年前
这是一个关于如何注册类方法的示例

xml_rpc_server_register_methode($xmlrpc_server, "foo", array(&$bar, "foo_func"));

其中 $bar 是您的类的实例,而 foo_func 是该类的某个方法。不要忘记 “&”!

希望这可能有用...

Chrigu
2
giunta dot gaetano at sea-aeroportimilano dot it
18 年前
为了让服务器以编程方式生成 xmlrpc 错误响应,注册为方法处理程序的 php 函数必须返回一个包含 FaultCode 和 FaultString 成员的数组。

function $myfunc($methodname, $vals, $extra_data)
{
...
return array('faultCode' => 666, 'faultString' => 'DOH!');
}
1
giunta dot gaetano at gmail dot com
3 年前
注意 1:即使您通过调用 `xmlrpc_server_register_introspection_callback` 或 `xmlrpc_server_add_introspection_data` 添加了内省数据,服务器也不会为您验证接收到的参数的数量或类型。
这意味着您必须在您的 php 函数中实现对接收到的参数的所有必要验证。

注意 2:注意处理接收到的参数中的 base64 和 datetime 值:这些值不会自动转换为 php 标量值,而是转换为具有 `xmlrpc_type` 和 `scalar` 成员的 stdClass 对象
0
dante at lorenso dot com
19 年前
要注册对同一类中的“静态”函数的回调,请考虑以下语法
<code>
$callback = array (__CLASS__, "my_function_name");
xmlrpc_server_register_method($xmlrpc_server, "my_function", $callback);
</code>
以这种方式操作可以更轻松地以后重命名您的类。
0
Nate Parsons
21 年前
以防它没有完全清楚 Chrigu 的意思,

您可以通过以下操作在您的类中注册一个方法

xml_rpc_server_register_methode($xmlrpc_server, "myClientCall", array(&$this, "handleClientCallFunc"));

其中 $this == 魔法类 $this。=)
To Top