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

Ral*_*lph 2 php

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

class car 
{
     private $make, $model;
     public function jsonSerialize()
     {
          return get_object_vars($this);
     }
} 
Run Code Online (Sandbox Code Playgroud)

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

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

return json_encode($cars);
Run Code Online (Sandbox Code Playgroud)

小智 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);
     }
} 
Run Code Online (Sandbox Code Playgroud)