首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP简单JSON-RPC

PHP简单JSON-RPC
EN

Stack Overflow用户
提问于 2014-05-21 13:24:04
回答 1查看 593关注 0票数 0

我正在尝试创建JSON服务。我用的是邮政法。

rest.php

代码语言:javascript
复制
<?php
header('Content-Type: application/json');
$input = file_get_contents("php://input");
$json = json_decode($input);

$output = $json->num + 10;
echo json_encode($output);
?>

输入:

代码语言:javascript
复制
{"num": 10 }

输出:

代码语言:javascript
复制
20

现在我正在尝试实现更多的方法,这样我就可以使用这样的输入:

代码语言:javascript
复制
{ 
    "method":"add", 
    "params": {
        "num1": 15, 
        "num2": 10
    }
}

因此,我向rest.php添加了函数

代码语言:javascript
复制
public function add($n1, $n2) {
    return $n1 + $n2;
}

问:如何确定调用的方法并使用新的输入在rest.php中执行?

编辑:

代码语言:javascript
复制
<?php

header('Content-Type: application/json');
$input = file_get_contents("php://input");
$json = json_decode($input);

foreach ($json->params as $param) {
    $params[] = $param;
}

$output = call_user_func_array($json->method, $params);
echo json_encode($output);

function add($n1, $n2) {
    return $n1 + $n2;
}
EN

回答 1

Stack Overflow用户

发布于 2014-05-21 13:29:11

您可以使用存在存在 (取决于您的需要)来检查您得到的字符串是否与现有元素匹配。

然后,可以使用功能方法来执行函数。

例如:

代码语言:javascript
复制
<?php
class foo{
    public function add($n1, $n2) {
        return $n1 + $n2;
    } 
}

$method = "add";
$object = new foo();
$n1 = 1;
$n2 = 8;
if(method_exists($object, $method))
{
    call_user_method($method, $object, $n1, $n2);
}

编辑:在这个例子中,我分配了n1和n2参数硬编码的值。在您的示例中,您可以从JSON获得params数组,并将其作为参数提供给所有方法。这样,您就不必在方法主体之外测试接收到的参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23784540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档