PHP:将对象转换为数组给出了带有命名空间的数组字段名称的索引?

时间:2016-02-11 14:19:09

标签: php arrays

我有这个班:

namespace backoffice\controller;

class MyObject{
   private $id;
   private $name;
}

我尝试将其转换为数组,然后转换为json数组:

$obj = new MyObject();
$obj->setId(1);
$obj->setName('Test');

json_encode((array)$obj);

我得到了这个结果:
{"backoffice\controller\MyObject\id":"1","backoffice\controller\MyObject\name":"Test"} !!!! 编辑:
为什么我不能得到这个结果:

{"id":"1","name":"Test"}

1 个答案:

答案 0 :(得分:2)

不要将其转换为数组(which will do things you don't expect),而是让MyObject实现JsonSerializable接口。

namespace backoffice\controller;

class MyObject implements \JsonSerializable
{
   private $id;
   private $name;

   public function jsonSerialize() {
       return get_object_vars($this);
   }

   // setters
}

然后您可以直接使用json_encode并获得所需的结果:

$obj = new MyObject;
$obj->setId(1);
$obj->setName('foo');
echo json_encode($obj); // {"id":1,"name":"foo"}