PHPackages                             eremin/serende - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. eremin/serende

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

eremin/serende
==============

PHP serialize() encoder &amp; decoder

0.0.1(6y ago)04MITPHP

Since Feb 18Pushed 6y ago1 watchersCompare

[ Source](https://github.com/eremin/serende)[ Packagist](https://packagist.org/packages/eremin/serende)[ RSS](/packages/eremin-serende/feed)WikiDiscussions master Synced 6d ago

READMEChangelog (1)DependenciesVersions (2)Used By (0)

SerEnDe
=======

[](#serende)

> PHP serialize() encoder &amp; decoder

Contents
--------

[](#contents)

- [Install](#install)
- [Use](#use)
    - [Decoder](#decoder)
    - [Encoder](#encoder)
    - [Types](#types)

Install
-------

[](#install)

I.e. with composer:

```
composer req eremin/serende
```

Use
---

[](#use)

Instances of decoder or encoder could be created with the factory class

```
use Eremin\SerEnDe\Factory;
$decoder = Factory::createDecoder();
$encoder = Factory::createEncoder();
```

### Decoder

[](#decoder)

Call `decodeFromString()` method, if you have serialized data in string or `decodeFromStream()` method, if you have it in some PHP stream.

```
$test = [
    1 => 'a',
    'b' => 2,
    true,
    'refTarget' => 'REF_TARGET',
];
$test['ref'] = &$test['refTarget'];
$serialized = \serialize($test);
/// string(86) "a:5:{i:1;s:1:"a";s:1:"b";i:2;i:2;b:1;s:9:"refTarget";s:10:"REF_TARGET";s:3:"ref";R:5;}"
$parsed = $decoder->decodeFromString($serialized);
// object(Eremin\SerEnDe\Types\ArrayType)#25 (2) {
//   ["elements":"Eremin\SerEnDe\Types\ArrayType":private]=>
//   array(5) {
//     [0]=>
//     object(Eremin\SerEnDe\Types\ArrayType\Element)#28 (2) {
//       ["key":"Eremin\SerEnDe\Types\ArrayType\Element":private]=>
//       object(Eremin\SerEnDe\Types\IntType)#26 (1) {
//         ["rawContent"]=>
//         string(1) "1"
//       }
//       ["value":"Eremin\SerEnDe\Types\ArrayType\Element":private]=>
//       object(Eremin\SerEnDe\Types\StringType)#27 (1) {
//         ["rawContent"]=>
//         string(1) "a"
//       }
//     }
//     [1]=>
//     object(Eremin\SerEnDe\Types\ArrayType\Element)#31 (2) {
//       ["key":"Eremin\SerEnDe\Types\ArrayType\Element":private]=>
//       object(Eremin\SerEnDe\Types\StringType)#29 (1) {
//         ["rawContent"]=>
//         string(1) "b"
//       }
//       ["value":"Eremin\SerEnDe\Types\ArrayType\Element":private]=>
//       object(Eremin\SerEnDe\Types\IntType)#30 (1) {
//         ["rawContent"]=>
//         string(1) "2"
//       }
//     }
//     [2]=>
//     object(Eremin\SerEnDe\Types\ArrayType\Element)#34 (2) {
//       ["key":"Eremin\SerEnDe\Types\ArrayType\Element":private]=>
//       object(Eremin\SerEnDe\Types\IntType)#32 (1) {
//         ["rawContent"]=>
//         string(1) "2"
//       }
//       ["value":"Eremin\SerEnDe\Types\ArrayType\Element":private]=>
//       object(Eremin\SerEnDe\Types\BoolType)#33 (1) {
//         ["rawContent"]=>
//         string(1) "1"
//       }
//     }
//     [3]=>
//     object(Eremin\SerEnDe\Types\ArrayType\Element)#37 (2) {
//       ["key":"Eremin\SerEnDe\Types\ArrayType\Element":private]=>
//       object(Eremin\SerEnDe\Types\StringType)#35 (1) {
//         ["rawContent"]=>
//         string(9) "refTarget"
//       }
//       ["value":"Eremin\SerEnDe\Types\ArrayType\Element":private]=>
//       object(Eremin\SerEnDe\Types\StringType)#36 (1) {
//         ["rawContent"]=>
//         string(10) "REF_TARGET"
//       }
//     }
//     [4]=>
//     object(Eremin\SerEnDe\Types\ArrayType\Element)#40 (2) {
//       ["key":"Eremin\SerEnDe\Types\ArrayType\Element":private]=>
//       object(Eremin\SerEnDe\Types\StringType)#38 (1) {
//         ["rawContent"]=>
//         string(3) "ref"
//       }
//       ["value":"Eremin\SerEnDe\Types\ArrayType\Element":private]=>
//       object(Eremin\SerEnDe\Types\ReferenceType)#39 (2) {
//         ["referencedType":"Eremin\SerEnDe\Types\ReferenceType":private]=>
//         object(Eremin\SerEnDe\Types\StringType)#36 (1) {
//           ["rawContent"]=>
//           string(10) "REF_TARGET"
//         }
//         ["rawContent"]=>
//         string(1) "5"
//       }
//     }
//   }
//   ["rawContent"]=>
//   NULL
// }
```

### Encoder

[](#encoder)

The encoder has only one method `encode()`:

```
$serialized = $encoder->encode($parsed);
// a:5:{i:1;s:1:"a";s:1:"b";i:2;i:2;b:1;s:9:"refTarget";s:10:"REF_TARGET";s:3:"ref";R:5;}
$data = unserialize($serialized);
// array(5) {
//   [1]=>
//   string(1) "a"
//   ["b"]=>
//   int(2)
//   [2]=>
//   bool(true)
//   ["refTarget"]=>
//   &string(10) "REF_TARGET"
//   ["ref"]=>
//   &string(10) "REF_TARGET"
// }
```

### Types

[](#types)

All types have the property `$rawContent`, but this should be used directly only at `StringType` and `SerializableObjectType`

#### NullType

[](#nulltype)

It represents NULL and has no content and no methods.

```
$type = new \Eremin\SerEnDe\Types\NullType();
$encoder->encode($type);
// N;
```

#### BoolType

[](#booltype)

It represents boolean and has two methods.

```
$type = new \Eremin\SerEnDe\Types\BoolType();
$type->setValue(true);
$encoder->encode($type);
// b:1;
$type->getValue();
// bool(true)
```

#### IntType

[](#inttype)

It represents integer and has two methods.

```
$type = new \Eremin\SerEnDe\Types\IntType();
$type->setValue(-555);
$encoder->encode($type);
// i:-555;
$type->getValue();
// int(-555)
```

#### FloatType

[](#floattype)

It represents float and has two methods.

```
$type = new \Eremin\SerEnDe\Types\FloatType();
$type->setValue(-5e-5);
$encoder->encode($type);
// d:-5.0E-5;;
$type->getValue();
// float(-5.0E-5)
```

#### StringType

[](#stringtype)

It represents string and as said above content of string will be accessed via `$rawContent` property.

```
$type = new \Eremin\SerEnDe\Types\StringType();
$type->rawContent = "hello \"\\ world!";
$encoder->encode($type);
// s:15:"hello "\ world!";
```

#### SerializableObjectType

[](#serializableobjecttype)

It represents object that implement `\Serializable` interface ([PHP documentation](https://www.php.net/manual/en/class.serializable.php)). It content will be produced via methods of this interface and can be accessed via `$rawContent` property.

```
class A implements Serializable {
    public $foo;
    public function serialize()
    {
        return \json_encode($this);
    }

    public function unserialize($serialized)
    {
        return \json_decode($serialized, true);
    }
}
class B {}
$type = new \Eremin\SerEnDe\Types\SerializableObjectType();
$type->rawContent = \json_encode(['foo' => 'bar']);
$encoder->encode($type);
// C:1:"A":13:{{"foo":"bar"}}
$type->className = 'B';
unserialize($encoder->encode($type));
// Warning: Class B has no unserializer
// object(B)#23 (0) {
// }
```

#### ArrayHandler

[](#arrayhandler)

coming soon...

#### ObjectHandler

[](#objecthandler)

coming soon...

###  Health Score

21

—

LowBetter than 18% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity3

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2280d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/688776?v=4)[Anton Eremin](/maintainers/eremin)[@eremin](https://github.com/eremin)

---

Top Contributors

[![eremin](https://avatars.githubusercontent.com/u/688776?v=4)](https://github.com/eremin "eremin (6 commits)")

### Embed Badge

![Health badge](/badges/eremin-serende/health.svg)

```
[![Health](https://phpackages.com/badges/eremin-serende/health.svg)](https://phpackages.com/packages/eremin-serende)
```

###  Alternatives

[mtdowling/jmespath.php

Declaratively specify how to extract elements from a JSON document

2.0k472.8M135](/packages/mtdowling-jmespathphp)[opis/closure

A library that can be used to serialize closures (anonymous functions) and arbitrary data.

2.6k230.0M284](/packages/opis-closure)[masterminds/html5

An HTML5 parser and serializer.

1.8k242.8M229](/packages/masterminds-html5)[sabberworm/php-css-parser

Parser for CSS Files written in PHP

1.8k191.2M65](/packages/sabberworm-php-css-parser)[michelf/php-markdown

PHP Markdown

3.5k52.4M345](/packages/michelf-php-markdown)[jms/metadata

Class/method/property metadata management in PHP

1.8k152.8M88](/packages/jms-metadata)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
