сериализация объекта — PHP сериализует защищенные переменные класса с неправильным количеством символов?

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

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

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

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

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

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

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

Кто-нибудь может предложить некоторое понимание этого?

РЕДАКТИРОВАТЬ (предоставление класса)

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

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

2

Решение

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

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

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]