PHP Conference Japan 2024

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 則註解

nyvsld at gmail dot com
19 年前
已註冊函式的原型

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

$method_name
呼叫用戶端已知的公開方法名稱
$params
呼叫用戶端指定的參數
$user_data
由 `xmlrpc_server_call_method` 傳遞的任何本地資料
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);
}
匿名
22 年前
這是一個如何註冊類別方法的範例

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

其中 $bar 是您的類別的實例,而 foo_func 是此類別的方法。別忘了 '&'!

希望這對您有所幫助...

Chrigu
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!');
}
giunta dot gaetano at gmail dot com
3 年前
注意 1:即使您透過呼叫 `xmlrpc_server_register_introspection_callback` 或 `xmlrpc_server_add_introspection_data` 來新增內省資料,伺服器也不會為您驗證收到的參數數量或型別。
這表示您必須在您的 php 函式中實作所有收到的參數的必要驗證。

注意 2:請注意處理接收參數中的 base64 和日期時間值:這些不會自動轉換為 php 純量值,而是轉換為具有成員 `xmlrpc_type` 和 `scalar` 的 stdClass 物件
dante at lorenso dot com
19 年前
若要將回呼註冊到同一個類別中的「靜態」函式,請考慮使用如下語法
<code>
$callback = array (__CLASS__, "my_function_name");
xmlrpc_server_register_method($xmlrpc_server, "my_function", $callback);
</code>
這樣做可以讓您稍後更輕鬆地重新命名您的類別。
Nate Parsons
21 年前
如果 Chrigu 的意思不是很明顯,

您可以使用以下方式註冊類別內的方法

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

其中 $this == 神奇的類別 $this. =)
To Top