← 返回首页
GitHub - php-type-language/mapper: ⚡ The best PHP mapper (hydrator/serializer) you've ever seen! · GitHub
Skip to content

Navigation Menu

Toggle navigation
Sign in
Appearance settings
Search or jump to...

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Resetting focus

php-type-language/mapper

 master
Go to file
Code

Repository files navigation

The best PHP mapper you've ever seen =)

You can see some examples here:

Full documentation in progress...

Installation

Mapper package is available as Composer repository and can be installed using the following command in a root of your project:

composer require type-lang/mapper

Quick Start

use TypeLang\Mapper\Mapping\MapType; class ExampleObject { public function __construct( #[MapType('list<non-empty-string>')] public readonly array $names, ) {} } $mapper = new \TypeLang\Mapper\Mapper(); $result = $mapper->normalize( new ExampleObject(['Example']) ); // Expected Result: // // array:1 [ // "names" => array:1 [ // 0 => "Example" // ] // ] $result = $mapper->denormalize([ 'names' => ['first', 'second'] ], ExampleObject::class); // Expected Result: // // ExampleObject {#324 // +names: array:2 [ // 0 => "first" // 1 => "second" // ] // } $result = $mapper->denormalize([ 'names' => ['first', 'second', ''], ], ExampleObject::class); // Expected Result: // // InvalidFieldTypeValueException: Passed value of field "names" must be of type // list<non-empty-string>, but array(3)["first", "second", ""] given at $.names[2]

Benchmarks

Results here like this.

Sample: An object that contains a collection of objects, which contains another collection of objects.

object<ExampleObject>{ name: string, items: list<ExampleObject> }

The results are sorted by mode time.

Denormalization

Denormalization: For example, conversion from JSON to PHP Object.

benchmark memory min mode rstdev
TypeLangStrictAttributesBench 1.929mb 91.180μs 105.264μs ±6.99%
TypeLangStrictPhpDocBench 2.048mb 98.860μs 108.488μs ±4.40%
TypeLangPhpDocBench 2.050mb 103.380μs 106.407μs ±5.91%
TypeLangAttributesBench 1.930mb 104.490μs 113.736μs ±4.23%
JMSAttributesBench 3.141mb 137.040μs 142.373μs ±6.78%
ValinorBench 2.701mb 227.370μs 252.458μs ±4.59%
SymfonyPHPStanExtractorBench 3.678mb 371.650μs 392.908μs ±2.86%
SymfonyPhpDocExtractorBench 4.027mb 379.740μs 387.303μs ±3.21%

Normalization

Normalization: For example, conversion from PHP Object to JSON.

benchmark memory min mode rstdev
ValinorBench 1.966mb 62.570μs 69.184μs ±3.99%
TypeLangStrictAttributesBench 1.845mb 81.090μs 88.343μs ±6.75%
TypeLangPhpDocBench 1.965mb 81.800μs 90.504μs ±5.99%
TypeLangAttributesBench 1.891mb 85.320μs 89.900μs ±5.15%
TypeLangStrictPhpDocBench 1.967mb 89.920μs 94.865μs ±2.62%
SymfonyPHPStanExtractorBench 2.086mb 93.160μs 100.173μs ±5.41%
SymfonyPhpDocExtractorBench 2.405mb 96.290μs 98.729μs ±4.17%
JMSAttributesBench 3.770mb 131.420μs 150.310μs ±5.85%

Footer

© 2026 GitHub, Inc.