我有两个课程ServiceDetails
和AvailableServices
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
答案 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;
}
}