Json сериализация обьектов на php

PHP

Сразу к делу. Чем не устраивает обычный json_encode? Я столкнулся с необходимостью предавать объекты из одного скрипта в другой. При использовании очереди, брокеру сообщений нужно отправить строку, которая будет передана консьюмеру. Т.е. по факту, все что у нас есть это строка.

В архитектуре моего приложения консьюмер делегировал выполнение некому процессору. Процессор был связан с определенного типа месседжем который в свою очередь содержал данные необходимые для процессинга. Т.о. для того чтобы определить процессор нужно знать тип месседжа. Поначалу это была обычная строка но потом стало понятно что нужна еще и структура. Одним объектом Message покрыть все случаи не получалось - вездесущие эрреи и строки ужасно напрягали и приводили к ошибкам.

Решение оказалось очень простым - перед серилазацией объекта в json, необходимо его сериализовать:

<?php
interface MessageInterface {}
class MessageA implements MessageInterface {
    private $a;

    public function setA($a)
    {
        $this->a = $a;
    }

    public function getA()
    {
        return $this->a;
    }
}

$a = new MessageA();
$a->setA('123');

$json = json_encode(serialize($a));

echo $json;

$obj = unserialize(json_decode($json));

var_dump(get_class($obj));

Так после десериализации у нас появляется объект того же типа и с теми же данными что и перед сериализацией. Win! Peace!

Comments