anton_reut
@anton_reut
Начинающий веб-разработчик

Для чего используют функции serialize/unserialize?

В некоторых примерах (например работа с содержимым Корзины которое получают из $_SESSION['cart']) вижу эти функции но не пойму для чего менять формат массива, и вообще зачем так делать?

Попробовал у себя на тестовом сайте эту функцию:
$a = [q, w , e];
$a2 = serialize($a);
print_r($a2);
echo "<br>";
$b2 = unserialize($a2);
print_r($b2);

Вывод:
a:3:{i:0;s:1:"q";i:1;s:1:"w";i:2;s:1:"e";}
Array ( [0] => q [1] => w [2] => e )

А вот пример из чужого урока, кусок кода корзины товаров (добавляет товар в корзину):
public function add($id, $count)
    {
        $this->items = isset($_SESSION['cart']) ? unserialize($_SESSION['cart']) : [];
        $current = isset($this->items[$id]) ? $this->items[$id] : 0;
        $this->items[$id] = $current + $count;
        $_SESSION['cart'] = serialize($this->items);
    }

Но для чего это здесь используется?
  • Вопрос задан
  • 471 просмотр
Пригласить эксперта
Ответы на вопрос 3
Melkij
@Melkij
PostgreSQL DBA
если открыть файл сессии текстовым редактором

То вы как раз и найдёте serialize/unserialize, которые механизм сессий и использует для чтения/записи данных в файле. (разумеется, если не говорить о кастомных sessionhandler - там может быть что угодно)

кусок кода корзины товаров (добавляет товар в корзину):

Здесь serialize/unserialize не нужны и никакого смысла либо пользы не несут.

serialize выполняет представление переменной PHP в некий бинарный вид (и это важно! результат serialize не текст, а именно бинарный блоб, в том числе может штатно использоваться NUL-байт). unserialize это представление восстанавливает обратно. Обратите внимание на большой варнинг в документации и не используйте unserialize на данных которые вы не контролируете полностью.

А если я попробую просто записать в ячейку не сериализованный массив?

Получите слово Array вместо данных и предупреждение от языка за некорректное использование массива.
Ответ написан
Комментировать
@MaikMain
Начинающий backend - developer
Например для удобного хранения массива в БД
Ответ написан
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
ещё чтоб сделать файловый кеш тебе нужно сохранить данные, время жизни и дату сохранения. сами данные в serialize, а массив из трех полей - в json. иначе было бы дважды json и велика вероятность потери
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 11:14
65000 руб./за проект
19 апр. 2024, в 11:08
5000 руб./за проект
19 апр. 2024, в 10:59
150000 руб./за проект