|
||||||||||
Сериализация объектов - объекты в сессиях
serialize()
возвращает строку,
содержащую представление в виде потока байтов любой переменной, которая может храниться в PHP. Чтобы иметь возможность unserialize() объект, должен быть определён класс этого объекта. То есть, если у вас имеется объект $a класса A в файле page1.php и вы его сериализуете, вы получите строку, которая ссылается на класс A и содержит все значения переменных, содержащихся в $a. Если вы хотите unserialize это в файле page2.php, воссоздав $a класса A, определение класса A обязано иметься в page2.php. Это можно сделать, например, сохранив определение класса A в include-файле и подключив этот файл и в page1.php, и в page2.php.
Если вы используете сессии и session_register() для регистрации объектов, эти объекты сериализуются автоматически в конце каждой PHP-страницы и десериализуются автоматически на каждой последующей странице. Это означает, что эти объекты могут появиться на любой странице, после того как стали частью вашей сессии. Настоятельно рекомендуем включать определение классов всех таких зарегистрированных объектов во все ваши страницы, даже если вы и не используете эти классы во всех ваших страницах. Если вы этого не сделаете и объект десериализуется в отсутствие определения класса, он потеряет ассоциацию с этим классом и станет объектом класса stdClass без всяких функций вообще, то есть станет практически бесполезен. Итак, если в вышеприведённом примере $a стало частью сессии через запуск session_register("a"), вы должны включить/include файл classa.inc во все ваши страницы, а не только в page1.php и page2.php. |
||||||||||
|