Serialize object properties
Serialize object/array properties, using different rules for each property., (*2)
use Harp\Serializer; $serializers = new Serializer\Serializers([ new Serializer\Native('nativeSerializerdArray'), new Serializer\Csv('csvString'), new Serializer\Json('jsonProperty'), ]); $obj = new stdClass(); $obj->nativeSerializerdArray = array('test' => 'param'); $obj->csvString = array('val', 'val2'); $obj->jsonProperty = array('test' => 'asd'); $serializers->serialize($obj); // Will output: // stdClass Object // ( // [nativeSerializerdArray] => a:1:{s:4:"test";s:5:"param";} // [csvString] => val,val2 // [jsonProperty] => {"test":"asd"} // ) print_r($obj); // Will unserialize all the relevant properties $serializers->unserialize($obj);
If you have an object that implements Serializable, but does not use the native php serialization you can use Object Serializer, greatly reducing the object's string footprint., (*3)
use Serializable; class SimpleObject implements Serializable { public $prop1; public $prop2; public function serialize() { return $this->prop1.','.$this->prop2; } public function unserialize($data) { list($this->prop1, $this->prop2) = explode(',', $data); } } $serializers = new Serializer\Serializers([ new Serializer\Object('test', 'SimpleObject'), ]); $obj = new stdClass(); $obj->test = new SimpleObject(); $obj->test->prop1 = 10; $obj->test->prop2 = 20; $serializers->serialize($obj); // Will output: // stdClass Object // ( // [test] => 10,20 // ) print_r($obj); // Will unserialize all the relevant properties $serializers->unserialize($obj);
Serializer is integrated into Harp ORM and gives you the ability to store arbitrary data in your database, by serializing the model's properties., (*4)
For example holding an api response in a "response" field., (*5)
// Model class Payment extends AbstractModel { public $id; public $response; } // Repo class Payment extends AbstractRepo { public function initialize() { $this ->addSerializers([ new Serializer\Json('response'), ]); } } $model = new Model\Payment(['response' => $someArray]); // The response property will get serialized as a json string. Repo\Payment::get()->save($model);
This trait gives you the ability to easily add serializers to another object., (*6)
class TestConfig { use SerializersTrait; } $config = new TestConfig(); $config ->serializeCsv('name'); // Return the Asserts object $config->getSerializers();
Here are all the methods added by this trait., (*7)
Method | Description |
---|---|
getSerializers() | Get the Serializers object |
addSerializer(AbstractSerializer) | Add arbitrary serializer |
serializeCsv($name) | Add an Csv serializer |
serializeJson($name) | Add an Json serializer |
serializeNative($name) | Add an Native serializer |
serializeObject($name, $class) | Add an Object serializer |
Copyright (c) 2014, Clippings Ltd. Developed by Ivan Kerin, (*8)
Under BSD-3-Clause license, read LICENSE file., (*9)