Маршалинг/ сериализация в PHP так же просто, как сериализация($var)?

вот определение маршалинга из Википедии:

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

Я всегда делал сериализацию данных в php через его сериализовать функцию, обычно на объектах или массивах. Но как определение Википедии маршалинга/сериализации происходит в этом serizalize( функция)?

2 ответов


что serialize не делает определения транспортных классов. Когда десериализация объекта, определение класса объекта должно присутствовать (загружается из базы код), в противном случае десериализация будет выполнена. От статья Википедии, которую вы упомянули:

до "маршала" объект означает записывать свое состояние и код(ы) таким образом, что, когда упорядоченный объект "неупорядоченными", копию исходного объекта, полученных, возможно, путем автоматической загрузки определения класса объекта. Вы можете маршалировать любой объект, который является сериализуемым или удаленным. Маршалинг похож на сериализацию, за исключением маршалинга также записывает кодовые базы. Маршалинг отличается от сериализации тем, что маршалинг специально обрабатывает удаленные объекты.

Если я правильно понял, то Serialize определенно не на 100% совместим с определением маршалинга в этом отношении. Я не знаю заранее определенного механизма, который сделал бы это в PHP. Думаю, ты ... пришлось бы объединить сериализованные данные и все необходимые определения классов в пакет (например, ZIP-файл).


как и Пекка, упомянутая выше, PHP не включает определение класса, поэтому он не выполняет маршалинг. Если класс для сериализованного объекта присутствует, то ответ на ваш вопрос-да: сериализация и так же просто, как serialize($abc).

лучший способ, который я знаю, чтобы позаботиться о маршалинга в PHP, это использовать сторонний инструмент, как Google Buffer Protocols или Facebook (Apache?) Бережливость, которая будет сериализована и маршал для вас. Вид окольными путями делать это (и пока у вас есть класс, вам не нужно маршировать в любом случае), но они, вероятно, лучшее решение проблемы.