xmlrpc_server_register_method

(PHP 4 >= 4.1.0, PHP 5)

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

描述

bool xmlrpc_server_register_method ( resource server, string method_name, string function )

警告

本函数是实验性的。本函数的行为,包括函数名称以及其它任何关于本函数的文档可能会在没有通知的情况下随 PHP 以后的发布而改变。使用本函数风险自担。

警告

本函数暂无文档,仅有参数列表。


add a note add a note User Contributed Notes
giunta dot gaetano at sea-aeroportimilano dot it
11-Aug-2006 09:55
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!');
}
nyvsld at gmail dot com
27-Nov-2005 09:03
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'
dante at lorenso dot com
12-Aug-2005 03:46
To register a callback to a 'static' function within the same class, consider a syntax like the following:
<code>
$callback = array (__CLASS__, "my_function_name");
xmlrpc_server_register_method($xmlrpc_server, "my_function", $callback);
</code>
Doing it this way makes it easier to rename your class later.
eiriks at hollowmatrix dot com
28-Mar-2005 07:08
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);
}
Nate Parsons
30-Apr-2003 06:12
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. =)
19-Nov-2002 02:40
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