Упорядочивает / сериализацию в PHP, столь простом, как сериализируют ($var)?

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

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

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

6
задан Kate Gregory 23 June 2010 в 14:01
поделиться

2 ответа

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

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

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

3
ответ дан 17 December 2019 в 07:02
поделиться

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

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

1
ответ дан 17 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: