2012-11-05 106 views
1

這是一直困擾我一段時間的東西,今天我發現了一個相對簡單的解決方案,我想我會分享,因爲我似乎找不到任何像樣的答案。將函數添加到STDClass

我有這樣的代碼爲我的DB包裝:

function find($id) { 
    //Fetch the results 
    //Put the results into an array 

    return (object) $results; 
} 

所以,我可以這樣做:

$result = DB::find(1); 
echo $result->name; #=> Hello world 

但我需要能夠分配方法,以新的成績。在這種情況下to_json

+0

爲什麼不能你只是傳遞$結果爲'json_encode'? – Gordon

+0

這不是'to_json'函數。它關於能夠實現$ results變量可以使用的函數。 – andy

+0

這是一個蹩腳的解釋抱歉。例如,你可以在將來實現這個功能:http://pastebin.com/swuf3rEi save()函數以前不可能實現。 – andy

回答

1

你可以這樣做是這樣的:

class Result { 
    protected $results; 

    public function __construct($results) { 
     $this->results = $results; 

     foreach($results as $key => $value) { 
      $this->$key = $value; 
     } 
    } 

    public function to_json() { 
     return json_encode($this->results); 
    } 
} 

現在,而不是返回return (object) $result只是做:return new Result($result);

$result = DB::find(1); 
echo $result->name;  #=> Hello world 
echo $result->to_json(); #=> {"name":"Hello world","content":"Hello World!"}