【问题标题】:json_encode an array of objects with private propertiesjson_encode 具有私有属性的对象数组
【发布时间】:2016-01-10 20:20:18
【问题描述】:

我正在寻找一种将 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);

【问题讨论】:

标签: php


【解决方案1】:

你不能对对象使用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);
     }
} 

【讨论】:

    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      相关资源
      最近更新 更多