2014-11-03 8 views
-1

У меня есть два класса ServiceDetails и AvailableServicesPHP - json_encode не печатает объект

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 
+0

Может ли downvoter оставить комментарий? – dayuloli

ответ

-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; 
    } 
} 
+0

Помог ли downvoter комментировать? – dayuloli

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); 
    }  
} 
+0

На самом деле не существует «правильного» метода. Это зависит от того, что вы ищете. Мой ответ не является само по себе. См. Http://stackoverflow.com/q/804045/2317532 – dayuloli