сериализация — как разработчику PHP, необходимо ли мне понимать, как serialize () генерирует хранимое представление значения?

я использую PHP 7.1.12 и я пытаюсь понять функциональность одной из самых важных встроенных функций в PHP serialize()

Я понял это serialize() используется для генерации хранимого представления значения, которое передается ему.

Я думаю это значит serialize() преобразует полученное значение в некоторую строку, используя ее внутреннюю функциональность. Правильно ли это мое восприятие serialize()?

Рассмотрим код ниже:

<?php

$a = [];
$a[] = $a;
echo "\na: ".serialize($a);

$b = [];
$b[] =& $b;
echo "\nb: ".serialize($b);

Выход :

a: a:1:{i:0;a:0:{}}
b: a:1:{i:0;a:1:{i:0;R:2;}}

В выводе не могу понять откуда буквы я, а, р идут на выход. Кроме того, я не могу понять, как этот вывод формируется serialize()

Итак, мой вопрос: Как разработчику PHP, необходимо ли мне понимать вышеприведенный вывод или я должен напрямую использовать этот вывод, не вдаваясь в его детали?

Пожалуйста, направьте меня в этом отношении.

0

Решение

Ниже приводится общее объяснение того, что означают эти символы.

строка

s:size:value;

целое число

i:value;

логический

b:value; (store '1' or '0')

Ноль

N;

массив

a:size:{key definition;value definition;(repeated per element)}

объект

O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}

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

1

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

Еще одна особенность формата сериализации в PHP заключается в том, что он будет правильно сохранять ссылки: важной частью здесь является R: 2; элемент. Это означает «ссылка на второе значение.
Поскольку объекты в PHP демонстрируют поведение, похожее на ссылку, сериализация также гарантирует, что один и тот же объект, встречающийся дважды, действительно будет одним и тем же объектом при десериализации:

$b = [];
$b[] =& $b;
echo "\nb: ".serialize($b);

output:b: a:1:{i:0;a:1:{i:0;R:2;}}

Весь массив — это первое значение, первый индекс — это второе значение, так что на это ссылаются.

1

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