2016-05-26 15 views
2

Я имею дело со странной проблемой в PHP 5.2.6, сериализации объектов.PHP сериализует защищенные переменные класса с неправильным количеством символов?

По-видимому, PHP хранит элементы защищенных переменных со звездочкой впереди своего имени. Это нормально и правильно, однако, рассмотрим следующий пример:

O:18:"object__songChords":1:{s:9:"*chords"} 

* аккорды не содержит 9 символов, а 7 (с Астерикса).

Естественно, я предположил, что на моей стороне есть некоторые недоразумения, и что PHP просто подсчитывает кавычки, но когда я сравниваю это с другими сохраненными строками, я считаю, что это не так.

Суть заключается в том, что PHP не может выполнить переориентирование этих объектов, хотя классы не изменились.

Notice: unserialize(): Error at offset 43 of 867 bytes in ... 

Может ли кто-нибудь рассказать об этом?

EDIT (обеспечивая класс)

class object__songChords { 
    protected $chords; 
    protected $lyrics; 
} 

Пожалуйста, обратите внимание, что я лишен приведенный выше пример сериализации для простоты - фактическая сериализация строка конечно содержит оба свойства.

+0

может вы предоставляете класс? и данные как пример php-файла? –

+0

Да, я только что редактировал вопрос – SquareCat

+0

Вы уверены, что это полная сериализованная строка? –

ответ

0

Отсчет не прочь, есть два \0 нулевые символы, разделяющие *, один на каждой стороне:

$o = new object__songChords; 
echo addslashes(serialize($o)); 

Урожайность:

O:18:\"object__songChords\":2:{s:9:\"\0*\0chords\";N;s:9:\"\0*\0lyrics\";N;} 

И unserialize() работы: https://3v4l.org/GvYXI