php - json_encode 具有私有(private)属性的对象数组

标签 php

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

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

以 json 格式返回汽车列表的 Controller 函数

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

return json_encode($cars);

最佳答案

你不能对对象使用 json_encode,它写在手册中(http://php.net/manual/en/function.json-encode.php)

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

在您的情况下,您缺少接口(interface)声明。试试这个

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

关于php - json_encode 具有私有(private)属性的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34710347/

相关文章:

php - 如何在 PHP 中将大写单词字符与正则表达式匹配?

php - 如何将图像从 Android 应用程序上传到网络服务器到特定文件夹

php - 根据访问级别 PHP 将菜单链接到登录页面

php - 在所有输入都填满之前,如何停止重新加载页面?

带有 PHP 数据的 Javascript 电子邮件验证特定域

php - Sql 运算符 "and"和 "or"无法正常工作

php - 将格式化的地址状态代码更改为 Woocommerce 订单中的状态名称

php - 在 codeigniter 中为每个用户选择最新记录

javascript - 如何从php调用js函数?

PHPStorm - 找不到内部对象的方法