簡體   English   中英

如何將JSON編碼的對象發送到將PHP類對象作為變量的PHP函數?

[英]How do you send a JSON encoded object to a PHP function that takes a PHP class object as a variable?

我有一個Java aplet,它將JSON編碼的對象發送到Zend Framework JSON Server。

我的問題是代碼是這樣設置的:

ServerController:

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();
}

ClassObject函數:

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

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

我從服務器收到錯誤響應,說obj必須是ClassObject的實例

好的,這就是我們最終要做的(快速而又骯臟的版本)...盡管我相信有更好的方法。

  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;
    }

}

如果刪除類型提示“ ClassObject”,則doSomething方法將接受任何傳入的數據。然后由doSomething方法來解碼json字符串,並對其進行一些有用的處理。

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

嗯,通常您不會編寫那樣的PHP函數,因為它不是強類型的。 通常,它看起來像這樣:

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

似乎您已嘗試編寫混合了某些Java語法的PHP函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM