inTox
вёбных дел мастер
Подозрительное поведение serialize()+__sleep()
Интересную вещь обнаружил сегодня. Перешли недавно с 4.0.6 на 4.3.3 (Apache 1.3.28, FreeBSD).
как известно при сериализации объекта ПХП 4.0.6 функция __sleep() должна возвращать массив с именами св-в объекта, которые следует сохранить, при этом если указать скажем 30 имен в массиве, то при сериализации так и будет записано O:7"myclass":30:{трали-вали}, где вместо "трали-вали" - уже реальные св-ва сериализуемого объекта (допустим 15 пар имя-значение).
теперь суть фикуса: 4.0.6 десериализовал это несоответствие прекрасно, видимо не проверяя чего там в начале сериализованной строки пишут. А вот 4.3.3 уже не желает этого делать, видимо более бдительно относясь к тому, что написано.
Решил потестить 4.3.3 на эту тему и вскрылся уже не фикус, а, на мой взгляд, кактус:
в такой же ситуации serialize() под 4.3.3 добавит несуществующие в сериализуемом объекте, но указанные в возвращаемом функцией __sleep() массиве св-ва, со значением NULL (те s:16:"notExistProperty";N. и при десериализации эти св-ва ессно развернутся...
Вот мне и интересно, кто нибудь сталкивался с такой фигней и, если факт известный (я просто не нашел нигде) ткните почитать. И вообще, это бага, фича или чьи-то шутки юмора?
Спасибо за внимание..
ЗЫ: Опять же все это лишь мои мысли по этому казусу. Так что если где-то неправ в толковании явления - буду всемерно рад, если поправите.
Интересную вещь обнаружил сегодня. Перешли недавно с 4.0.6 на 4.3.3 (Apache 1.3.28, FreeBSD).
как известно при сериализации объекта ПХП 4.0.6 функция __sleep() должна возвращать массив с именами св-в объекта, которые следует сохранить, при этом если указать скажем 30 имен в массиве, то при сериализации так и будет записано O:7"myclass":30:{трали-вали}, где вместо "трали-вали" - уже реальные св-ва сериализуемого объекта (допустим 15 пар имя-значение).
теперь суть фикуса: 4.0.6 десериализовал это несоответствие прекрасно, видимо не проверяя чего там в начале сериализованной строки пишут. А вот 4.3.3 уже не желает этого делать, видимо более бдительно относясь к тому, что написано.
Решил потестить 4.3.3 на эту тему и вскрылся уже не фикус, а, на мой взгляд, кактус:
в такой же ситуации serialize() под 4.3.3 добавит несуществующие в сериализуемом объекте, но указанные в возвращаемом функцией __sleep() массиве св-ва, со значением NULL (те s:16:"notExistProperty";N. и при десериализации эти св-ва ессно развернутся...
Вот мне и интересно, кто нибудь сталкивался с такой фигней и, если факт известный (я просто не нашел нигде) ткните почитать. И вообще, это бага, фича или чьи-то шутки юмора?
Спасибо за внимание..
ЗЫ: Опять же все это лишь мои мысли по этому казусу. Так что если где-то неправ в толковании явления - буду всемерно рад, если поправите.