Мои данные поступают в виде ассоциативных массивов. Это работает, но мой код - беспорядок вложенных массивов, и я хотел бы начать использовать надлежащие OO / Objects, чтобы облегчить работу с этими данными. Я не могу изменить способ получения этих данных, поэтому я хотел бы найти более чистый способ преобразования ассоциативных массивов в экземпляры моих классов ниже.
У меня есть эти классы для моделирования людей в моем приложении:
class Person {
/**
* @var string
*/
private $_name;
/**
* @var array[Dog]
*/
private $_dogs = array();
/**
* @var array[Hobby]
*/
private $_hobbies = array();
}
class Dog {
/**
* @var string
*/
private $_color;
/**
* @var string
*/
private $_breed;
}
class Hobby {
/**
* @var string
*/
private $_description;
/**
* @var int
*/
private $_cost;
}
Мои данные (в формате JSON) выглядят так:
'person': {
'name': 'Joe',
'dogs': [
{'breed': 'Husky', 'color': 'Black'},
{'breed': 'Poodle', 'color': 'Yellow'}
]
'hobbies': [
{'description': 'Skiing', 'cost': 500},
{'description': 'Running', 'cost': 0}
]
}
Я могу легко преобразовать этот JSON в ассоциативный массив, используя json_decode
, но возникают трудности с преобразованием каждого из вложенных объектов Hobby
и Pet
в соответствующие классы, а затем, когда я хочу вернуть ассоциативный массив , снова превращая эти объекты в ассоциативные массивы.
Я могу сделать все это, написав функцию массива to / from в каждом из моих классов, но это выглядит довольно грязно и подвержено ошибкам. Есть ли более простой способ, которым я могу быстро гидратировать / обезвоживать эти объекты?