2016-01-10 3 views
0

Я ищу эффективный способ использования json_encode для массива объектов. Проблема заключается в том, что у моих объектов все частные свойства (использовать геттеры и сеттеры), а json_encode не будет втягивать их. Поэтому я создал функцию jsonSerialize для объекта с возвратом частных переменных, но я не знаю, как выполнить функция для каждого объекта в массиве эффективно. Я мог бы использовать цикл для выполнения функции jsonSerialize для каждого объекта, но я боюсь, что это может быть слишком медленным.json_encode массив объектов с частными свойствами

class car 
{ 
    private $make, $model; 
    public function jsonSerialize() 
    { 
      return get_object_vars($this); 
    } 
} 

функция контроллера вернуть список автомобилей в формате JSON

$cars = $db->getAllCars(); //returns an array of objects using fetchall 

return json_encode($cars); 
+0

http://stackoverflow.com/questions/7005860/php-json-encode-class-private-members – smoqadam

ответ

2

Вы можете использовать JsonSerializable типа так:

class Car implements JsonSerializable 
{ 
    private $make, $model; 

    public function jsonSerialize() { 
     return array($this->make, $this->model); 
    } 
} 

var $car = new Car(); 
echo json_encode($car, JSON_PRETTY_PRINT); 
+0

Спасибо за ввод. Это то, что мне нужно. – Ralph

2

Вы не можете использовать json_encode для объектов, это написано в руководстве (http://php.net/manual/en/function.json-encode.php)

Прежде всего, необходимо реализовать в вашем объекте Интерфейс JsonSerializable для получения то, что вы ищете (http://php.net/manual/en/jsonserializable.jsonserialize.php).

В вашем случае вам не хватает декларации интерфейса. Попробуйте

class car implements JsonSerializable 
{ 
    private $make, $model; 
    public function jsonSerialize() 
    { 
      return get_object_vars($this); 
    } 
} 
+0

Спасибо за совет. – Ralph

Смежные вопросы