json_encode具有私有属性的对象数组

时间:2016-01-10 20:20:19

标签: php

我正在寻找一种将json_encode用于对象数组的有效方法。我遇到的问题是我的对象都有私有属性(使用getter和setter)而json_encode不会将它们拉进去。所以我为一个对象创建了一个jsonSerialize函数,返回私有变量,但我不知道如何执行有效地为数组中的每个对象的功能。我可以使用循环为每个对象执行jsonSerialize函数,但我担心这可能太慢了。

class car 
{
     private $make, $model;
     public function jsonSerialize()
     {
          return get_object_vars($this);
     }
} 

控制器功能,以json格式返回汽车列表

$cars = $db->getAllCars();  //returns an array of objects using fetchall

return json_encode($cars);

2 个答案:

答案 0 :(得分:5)

您不能将json_encode用于对象,它已写在手册中(http://php.net/manual/en/function.json-encode.php

首先,您需要在对象中实现 JsonSerializable 界面,以实现您正在寻找的内容(http://php.net/manual/en/jsonserializable.jsonserialize.php)。

在您的情况下,您错过了接口声明。试试这个

class car  implements JsonSerializable
{
     private $make, $model;
     public function jsonSerialize()
     {
          return get_object_vars($this);
     }
} 

答案 1 :(得分:2)

您可以使用JsonSerializable这样的类型:

class Car implements JsonSerializable
{
     private $make, $model;

     public function jsonSerialize() {
         return array($this->make, $this->model);
     }
} 

var $car = new Car();
echo json_encode($car, JSON_PRETTY_PRINT);