https://github.com/phore/phore-hydrator
serialize / unserialize plain into object structures
https://github.com/phore/phore-hydrator
Last synced: 5 months ago
JSON representation
serialize / unserialize plain into object structures
- Host: GitHub
- URL: https://github.com/phore/phore-hydrator
- Owner: phore
- License: mit
- Created: 2020-09-01T10:35:37.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2025-01-10T11:53:51.000Z (over 1 year ago)
- Last Synced: 2025-10-20T06:54:29.454Z (8 months ago)
- Language: PHP
- Size: 70.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# phore-hydrator
serialize / unserialize plain into object structures. Hydrator parses
the DocComments of public properties and instanciates the classes
according to the definiton.
Examples:
- [hydrator-usage-example.php](doc/hydrator-usage-example.php)
Installation:
```
composer install phore/hydrator
```
## Basic Example
```php
class UserData {
/**
* @var string
*/
public $name;
/**
* Assoc Array
* @var array
*/
public $map;
/**
* @var int
*/
public $age;
}
$input = ["name"=>"bob", "age"=>37];
$userData = phore_hydrate($input, UserData::class);
assert( $userData instanceof UserData);
```
`$userData` is a `UserData` Object and all properties casted correctly
to desired types specified in DocComments.
## Recognized Annotations
- Simple types like `string`, `int`, `bool`, `float`, `array`
- Array types like `string[]`, `int[]`...
- Object types `OtherClass`
- Arrays of Objects `OtherClass[]`
- Nullable properties `type|null`
## Guide
### Getters / Setters
On objects, hydrator will try to set property values in the following
order:
1) If object has a `set($value)`-Method it will use it first
2) If the property is `public` it will be set directly
3) If there is a `__set($name, $value)` method it will be used
### Default Values
Default values will be applied if no data was found for the specific
key
```
public $prop1 = []
```
### Optional Properties
You can define a property as optional by adding `|null` to the
DocBlock.
```
/**
* @var SomeEntity1|null
*/
public $entity1;
```
If the input data was not found, the value will be `null`.
### Filter input data before hydration
To ease backwards compatibility issues, the magick `__hydrate()` method
is called to prefilter the input data before it is hydrated.
```php
class Entity1 {
public $p1;
public function __hydrate(array $input) : array
{
// .. modify input to match the object ..
return $input;
}
}
```
### Dealing with additional / undefined input data
By default, on undefined input keys, hydrator will throw
an exception. You can toggle this behaviour