百科狗-知识改变命运!
--

xmlrpc_server_register_method() - xml-rpc函数

梵高1年前 (2023-11-21)阅读数 11#技术干货
文章标签函数

xmlrpc_server_register_method()

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

注册一个 PHP 函数用于匹配 xmlrpc 方法名

说明

xmlrpc_server_register_method(resource $server,string $method_name,string $function): boolWarning

此函数是实验性的。此函数的表象,包括名称及其相关文档都可能在未来的PHP 发布版本中未通知就被修改。使用本函数风险自担。

Warning

xmlrpc_server_register_method() - xml-rpc函数

本函数还未编写文档,仅有参数列表。

prototype of registered function:
function method_impl(string $method_name, array $params, array $user_data);
$method_name
  the public method name, known by calling client
$params
  parameters specified by calling client
$user_data
  any local data, passed by `xmlrpc_server_call_method'
Here is an example how to register a class methode:
xml_rpc_server_register_methode($xmlrpc_server, "foo", array(&$bar, "foo_func"));
where $bar is the instance of your class and foo_func a methode of this class. Don't forget the '&'!
hope this may be useful...
Chrigu
Remember that you can't do like Chrigu and Nate said if you want to add methods from a static class (Hence you can't create any instances of it).
A workaround is to create lambda functions calling the
methods:
// Our static handler class
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;
  }
}
// Use reflection to get method names and parameters
$mirror = new ReflectionClass("MyHandler");
foreach ($mirror->getMethods() as $method)
{
  // Create new "lambda" function for each method
  
  // Generate argument list
  $args = array();
  foreach ($method->getParameters() as $param)
  {
    $args[] = '$'.$param->getName();
  }
  $args = implode(',', $args);
  
  // Generate code
  $methodname = $method->getName();
  $code = "return {$real_class}::{$methodname}({$args});";
  
  // Create function, retrieve function name
  $function_name = create_function($args, $code);
  // Register the function
  xmlrpc_server_register_method($myserver, $methodname, $function_name);
}
To have an xmlrpc fault response programatically generated by the server, the php function registered as method handler must return an array containing a FaultCode and a FaultString members.
function $myfunc($methodname, $vals, $extra_data)
{
...
return array('faultCode' => 666, 'faultString' => 'DOH!');
}
To register a callback to a 'static' function within the same class, consider a syntax like the following:
$callback = array (__CLASS__, "my_function_name");
xmlrpc_server_register_method($xmlrpc_server, "my_function", $callback);
Doing it this way makes it easier to rename your class later.
In case its not completely obvious what Chrigu meant,
You can register a method inside your class by doing the following:
xml_rpc_server_register_methode($xmlrpc_server, "myClientCall", array(&$this, "handleClientCallFunc"));
where $this == the magic class $this. =)

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)