northern / serializer
Serializes a annotated object to a plain PHP array.
Requires
- php: >=5.3.0
- doctrine/annotations: 1.*
- northern/common: 1.*
Requires (Dev)
- phpunit/phpunit: ~4.1
This package is not auto-updated.
Last update: 2024-12-17 04:42:13 UTC
README
Northern\Serializer is a small PHP library that allows you to annotate your POPO's and serialize them into a plain PHP array.
To run the tests:
vendor/bin/phpunit
To generate code coverage reports:
vendor/bin/phpunit --coverage-html ./reports
Find Northern\Serializer on Packagist
Installation
Install through Composer.
"require": { "northern/serializer": "1.*" }
How to use
To use Northern\Serializer you need to import it:
use Northern\Serializer\Serializer;
You can now instantiate and run the serializer on any PHP object:
$serializer = new Serializer(); $array = $serializer->toArray( $someObject );
However, without having annotated $someObject
's class, nothing will be serialized. Let's annotate the class of which $someObject
is an instance:
use Northern\Serializer\Annotation as Serialize; class SomeClass { /** @Serialize\Int */ protected $myProperty = 123; }
We have now annotated our class and indicated that the $myProperty
attribute must be serialized as an integer. When we now serialize $someObject
(which is assumed to be an instance of SomeClass
) the $array
variable will contain the serialized data:
Array( [myProperty] => 123 )
Easy as.
With Northern\Serializer you can also serialize methods. Usually a serialized method is a getter of some sort. Let's look at an example:
use Northern\Serializer\Annotation as Serialize; class SomeClass { /** @Serialize\Int(name="myValue") */ public function getMyValue() { return 123; } }
As the above demonstrates, by simply adding the correct annotation to the method, the output of the method will be serialized as the key set by the annotation name
parameter, which is myValue
in our example:
Array( [myValue] => 123 )
If the name
attribute is not specified on the annotation then the name of the method will be used as the serialization key, e.g:
class SomeClass { /** @Serialize\Bool */ public function isValid() { return true; } }
Which will produce:
Array( [isValid] => 1 )
Serializing properties and methods are of course very handy but what about a nested object? Can do too:
class BarClass { /** @Serialize\Int */ protected $barValue = 123; } class FooClass { /** @Serialize\Object */ protected $bar; public function __construct() { $this->bar = new BarClass(); } }
Notice the Serialize\Object
annotation? Be careful with recursive references!
Reference
These are the available serialization types:
Type | Description
- | -
Serialize\Bool
| Serializes a boolean value.Serialize\Int
| Serializes an integer value.Serialize\Object
| Serializes an object. Indicates recursion.Serialize\Collection
| Serializes an iterable, e.g. an array of objects.