2014-11-03 134 views
-1

我有两个类ServiceDetailsAvailableServicesPHP - 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,除外AvailableServicesservices财产没有输出。

var_dump($services); // something 
echo json_encode($services); // nothing 
+0

请问downvoter照顾对此有何评论? – dayuloli 2014-11-03 07:32:13

回答

-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

下载者是否在意评论? – dayuloli 2014-11-03 07:33:09

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 2014-11-03 07:31:51