класс — json_encode не печатает объект

У меня два класса 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

-1

Решение

Правильный ответ здесь — реализовать 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);
}
}
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;
}
}
-1

По вопросам рекламы [email protected]