1

我有一个 java aplet 将 JSON 编码对象发送到 Zend Framework JSON 服务器。

我遇到的问题是代码设置如下:

服务器控制器:

public function jsonAction()
{

$server = new Zend_Json_Server();
$Server->setClass('Application_Model_ClassObject', 'co');

if('GET' == $_SERVER['REQUEST_METHOD'])
{
    $server->setTarget('...')
           ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
    $smd = $server->getServiceMap();

    header('Content-Type: application/json');

    echo $smd;
    return
}

echo $server->handle();
}

类对象函数:

/**
* DoSomethign description
* @param ClassObject
*/
public function doSomething(Application_Model_ClassObject $obj)
{

    $someVariable = $obj->getSomeValue();
    ...
}

我从服务器收到一个错误响应,说obj需要是ClassObject

4

3 回答 3

1

好的,这就是我们最终要做的(快速而肮脏的版本)......虽然我相信有更好的方法。

  1. 删除了类型提示,以便该函数能够接收任何数据。
  2. 在“Application_Model_ClassObject”中创建一个新函数,它将处理数据数组或对象。
  3. 在“doSomething”中添加了一些额外的行,以便其余的可以正常进行。

以下是一些细节:

/**
* DoSomethign description
* @param ClassObject
*/
public function doSomething($data)
{
    $obj = new Application_Model_ClassObject();
    $obj->populate($data);

    $someVariable = $obj->getSomeValue();
    ...
}

/**
*
* Application_Model_ClassObject class
*/
class Application_Model_ClassObject
{
    ...

    public function populate($row)
    {
        if (is_array($row)) {
        $row = new ArrayObject($row, ArrayObject::ARRAY_AS_PROPS);
        }

        if (isset ($row->SomeValue)) {
        $this->setSomeValue($row->SomeValue);
        }

        return $this;
    }

}
于 2012-06-08T11:38:00.993 回答
-1

如果删除类型提示“ClassObject”,则 doSomething 方法将接受任何传入的数据。然后由 doSomething 方法对 json 字符串进行解码,并对其进行一些有用的操作。

于 2012-05-09T10:16:31.993 回答
-3

公共函数 doSomething(ClassObject obj) { ... }

嗯,通常你不会写这样的 PHP 函数,因为它不是强类型的。通常,它看起来像这样:

公共函数 doSomething($obj) {...}

看起来您试图编写一个混合了一些 Java 语法的 PHP 函数。

于 2012-05-09T10:02:00.537 回答