2012-11-05 83 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!"}