Ответ 1
Основная структура выглядит следующим образом:
Скалярные типы:
-
Булевы сериализуются как:
b:<i>;
где
<i>
- целое число со значением либо0
(false), либо1
(true). -
Целые числа сериализуются как:
i:<i>;
где
<i>
- целочисленное значение. -
Поплавки сериализуются как (с
d
означает double):d:<f>;
где
<f>
- значение поплавка. -
Строки сериализуются как:
s:<i>:"<s>";
где
<i>
- целое число, представляющее длину строки<s>
, а<s>
- строковое значение.
Специальные типы:
-
null
просто сериализуется как:N;
Составные типы:
-
Массивы сериализуются как:
a:<i>:{<elements>}
где
<i>
- целое число, представляющее число элементов в массиве, и<elements>
нулевые или более сериализованные пары ключей:<key><value>
где
<key>
представляет собой сериализованный скалярный тип и<value>
любое значение, которое может быть сериализуемым. -
Объекты сериализуются как:
O:<i>:"<s>":<i>:{<properties>}
где первый
<i>
представляет собой целое число, представляющее длину строки<s>
, а<s>
- это полное имя класса (имя класса, добавленное с полным пространством имен). Второй<i>
представляет собой целое число, представляющее количество свойств объекта.<properties>
- это пары с нулевыми или более сериализованными именами:<name><value>
где
<name>
представляет собой сериализованную строку, представляющую имя свойства, и<value>
любое сериализуемое значение.Есть уловка с
<name>
, хотя:<name>
представляется какs:<i>:"<s>";
где
<i>
- целое число, представляющее длину строки<s>
. Но значения<s>
различаются по видимости свойств:а. С общедоступными свойствами
<s>
является простым именем свойства.б. Однако с защищенными свойствами
<s>
является простым именем свойства, добавленным\0*\0
- звездочкой, заключенной в два символаNUL
(т.е.chr(0)
).с. И с частными свойствами,
<s>
- это простое имя свойства, добавленное с помощью\0<s>\0
-<s>
, заключенное в два символаNUL
, где<s>
- это полностью квалифицированный класс имя.
Есть несколько других случаев, таких как R:<i>;
, которые представляют ссылки, которые я не упоминал здесь (потому что я честно еще не понял его работы), но это должно дать вам Порядочная идея о механизме сериализации PHP.