Я имею дело со странной проблемой в 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;
}
Обратите внимание, что для простоты я удалил приведенный выше пример сериализации — фактическая строка сериализации, конечно, содержит оба свойства.
Счет не выключен, есть два \0
нулевые символы, разделяющие *
по одному на каждой стороне:
$o = new object__songChords;
echo addslashes(serialize($o));
Урожайность:
O:18:\"object__songChords\":2:{s:9:\"\0*\0chords\";N;s:9:\"\0*\0lyrics\";N;}
Других решений пока нет …