Я пытаюсь сохранить большой класс, называемый Authorizer, который содержит ссылку на соединение с базой данных и контейнер других объектов, представляющих результат сложного набора запросов к базе данных. Я хочу сериализовать дорогостоящее, чтобы построить части этого объекта в сеансе. Затем, когда мне нужно задать Авторизатору вопрос, я хочу разбудить объект Авторизатора вместо создания нового для каждой страницы. Я пишу пользовательский обработчик для временного хранения этого объекта в таблице базы данных. Я понимаю, что магический метод __sleep () обычно используется для обработки выбора частей объекта для хранения, а затем __wakeup () используется для восстановления соединения с базой данных.
Это где я становлюсь нечетким. Я думаю, что serialize () и unserialize () должны работать вместо конструктора и деструктора, но я не совсем понимаю, как они взаимодействуют с __sleep () и __wakeup (). Затем я добрался до части руководства, описывающей сериализуемый интерфейс, и подумал, что хорошо, я смогу реализовать это и быть уверенным, что у меня есть это право. Затем я прочитал, что классы, которые реализуют этот интерфейс, больше не поддерживают __sleep () и __wakeup ()! Это была единственная часть всей этой вещи, которую я действительно понял>: - {Я не смог найти никаких примеров того, как правильно реализовать этот интерфейс.
Итак, мой вопрос: каков предпочтительный способ реализации сериализации в полностью объектно-ориентированной системе? Сериализуемый интерфейс предназначен для замены старого метода? Какова цель наличия двух разных наборов функций (_ sleep () / _wakeup () и serialize () / unserialize ())?