php里model对象有没有什么办法可以转成json格式输出?


   
  $categorylist = $categorydao->findSubTree();
  
$cate_arr = array();
for($i=1;$i<count($categorylist);$i++){
$arr = array("id"=>$categorylist[$i]->getId(),"pid"=>$categorylist[$i]->getPid(),"locale"=>$categorylist[$i]->getLocale(),"image"=>$categorylist[$i]->getImage(),"name"=>$categorylist[$i]->getName(),"details"=>$categorylist[$i]->getDetails(),"csort"=>$categorylist[$i]->getCsort(),"nodestr"=>$categorylist[$i]->getNodestr());
$cate_arr[] = $arr;
}
echo json_encode($cate_arr);

例如以上这段代码是我想到的一个办法。把全部转成数组之后,再通过json_encode改成json输出。
但是我发现并不是特别的好,如果对象里的属性多的话,那我会打的很麻烦,想请教下高手,有没有更好的方法呢?
谢谢了

smarty php

净火的神子 11 years, 3 months ago

你这个for循环写的....每次都count一次..
foreach好很多....
可以定义一个getJson 的interface.假定Model是原来的Model类:

   
  <?php
  
class Model{
//Model Code..
}
interface ObjtoJson{
public function getJson();
}
class NewModel extends Model,implements ObjJson{
//要输出为json格式的对象属性列表,可以配置,也可以调用setJsonAttrs()重新设置.
public $jsonAttrs = array();

public function setJsonAttrs($jsonAttrs){
//重新设置 jsonAttrs
}

public function __get($attr){
$method = 'get'.ucfrst($name);
if(method_exists($this, $method)){
return $this->$method();
}else{
throw new Exception("Method {$method} does not exist", 1);
}
}

public function getJson(){
if(empty($this->jsonAttrs)){
return false;
}
$jsonTmpArr = array();
foreach($this->jsonAttrs as $v){
//也可以把获取属性的方法在这里拼接,对应的删掉__get($name)
$jsonTmpArr[$v] = $this->$v;
}
unset($v);
return json_encode($jsonTmpArr);
}
}

Fel73 answered 11 years, 3 months ago

Your Answer