2015-11-16 4 views
2

У меня есть классы, которые расширяют абстрактный класс. Мне нужно создать экземпляры этих классов через строку - желательно JSON.Сериализация/десериализация вложенных объектов в JSON с типом в PHP

Многие объекты вложены, и многие свойства являются частными. Мне нужно:

  1. Создайте строку JSON для полного объекта (с частными свойствами и вложенными объектами - с их частными свойствами).
  2. Создайте новый объект из строки JSON с правильным типом и всеми вложенными объектами.

Я думаю, это должно быть рекурсивным.

Я использую пространства имен, которые выглядят как дерьмо, если я просто передаю объект массиву.

Я подумываю написать парсер, пометить классы в моих строках JSON, а затем жестко задавать заводскую функцию для каждого класса, но это займет много времени.

+0

эй там. Я удалил тег laravel, поскольку ничто не указывает на его значение? Не стесняйтесь добавлять его снова, как вы думаете, это актуально, но, пожалуйста, добавьте, почему это в вашем вопросе. –

ответ

1

Я предлагаю вам использовать serialize функцию РНР

В подобных случаях это лучше, чтобы использовать эту функцию, так как она существует для этой цели: вы можете хранить сериализованную строку, где вы хотите, и после десериализации его вы получите обратно исходный объект PHP со всеми свойствами

С JSON, как вы сказали, вы не поймете, какой класс был у объекта (если вы не храните его вручную в виде строки), и, конечно же, будут проблемы связанные с частной собственностью

+0

То, что я создаю приложение, в котором другое приложение будет обслуживать его данными, через базу данных MySQL. Однако я тоже собираюсь создать это приложение, поэтому я могу принять все решения. Было бы жизнеспособным решением превратить сериализованную строку в JSON? А затем JSON в сериализованную строку, которую я использую для создания своих объектов? – Christoffer

+0

Я не уверен, что вы можете хранить сериализованную строку в JSON (но, вероятно, да), вам придется попробовать ее. Есть ли какая-то конкретная причина, по которой вы должны использовать JSON, а не хранить обычную сериализованную строку? – Moppo

+0

Ну. Другое приложение собирается создавать эти данные через приложение с интерфейсом Javascript. Я не буду создавать это приложение через несколько недель, поэтому я не знаю, с какими трудностями я столкнусь.Поэтому попытка использовать JSON в максимально возможной степени для перетасовки данных вокруг может быть хорошей идеей. – Christoffer

2

Предлагаю использовать jms serializer: http://jmsyst.com/libs/serializer Прост в использовании, конфигурируется и поддерживает все функции, которые вы запросили.

1

Для этого есть три метода: JSON, Serialize и var_export.

С JSON он будет работать только с объектами stdClass, но его легко прочитать и использовать вне PHP.

Сериализация работает с экземплярами классов, отличных от stdClass, но может быть трудно читать и может использоваться только PHP. http://php.net/manual/en/function.serialize.php

var_export выводит код PHP для создания объекта (поэтому вы должны записать его в файл PHP), его очень легко прочитать, но нельзя использовать вне PHP. Объекты должны иметь установленный метод состояния. http://php.net/manual/en/function.var-export.php