PHP - json_encode不打印对象

时间:2014-11-03 06:37:27

标签: php class object private public

我有两个课程ServiceDetailsAvailableServices

class ServiceDetails {
    private $service_name;
    private $price;
    private $currency_id;
    public function __construct($service_name, $price, $currency_id) {
        $this->service_name = $service_name;
        $this->price = $price;
        $this->currency_id = $currency_id;
    }
}

class AvailableServices {
    public $services;
    public function __construct() {
        $this->services = [];
    }
}

我创建了一个AvailableServices的实例,并将一个类ServiceDetails的对象添加到$services实例的AvailableServices数组中。

$services = new AvailableServices();
$service_details = new ServiceDetails($a, $b, $c);
$services->services[] = clone $service_details;

var_dump $services对象并正确输出。但是,当我执行json_encode时,除了services的{​​{1}}属性外,没有任何输出。

AvailableServices

2 个答案:

答案 0 :(得分:1)

这里的正确答案是为ServiceDetails类实现JsonSerializable接口。

class ServiceDetails implements JsonSerializable{
    private $service_name;
    private $price;
    private $currency_id;
    public function __construct($service_name, $price, $currency_id) {
        $this->service_name = $service_name;
        $this->price = $price;
        $this->currency_id = $currency_id;
    }

    /**
     * Returns JSON representation
     * 
     * @return array|mixed
     */
    public function jsonSerialize() {
        return get_object_vars($this);
    }    
}

答案 1 :(得分:-1)

json_encode打印属性,这些属性必须为public。将ServiceDetails更改为使用public而不是private可以解决问题。

class ServiceDetails {
    public $service_name;
    public $price;
    public $currency_id;
    public function __construct($service_name, $price, $currency_id) {
        $this->service_name = $service_name;
        $this->price = $price;
        $this->currency_id = $currency_id;
    }
}