У меня два класса 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
собственностью AvailableServices
,
var_dump($services); // something
echo json_encode($services); // nothing
Правильный ответ здесь — реализовать JsonSerializable интерфейс для ServiceDetails
учебный класс.
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);
}
}
За 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;
}
}