GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - php-type-language/mapper: ⚡ The best PHP mapper (hydrator/serializer) you've ever seen!

BranchesTags
Open more actions menu

Latest commit

 

History

508 Commits
508 Commits

Folders and files

NameName
Last commit message
Last commit date
.github/workflows
.github/workflows
 
 
bench
bench
 
 
example
example
 
 
resources
resources
 
 
src
src
 
 
tests
tests
 
 
.editorconfig
.editorconfig
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
.php-cs-fixer.php
.php-cs-fixer.php
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
composer.json
composer.json
 
 
extension.neon
extension.neon
 
 
phpstan.neon
phpstan.neon
 
 
phpunit.xml
phpunit.xml
 
 

Repository files navigation


PHP 8.1+ Latest Stable Version Latest Unstable Version License MIT

The best PHP mapper you've ever seen =)

You can see some examples here:

  • 01.normalization
    • 01.object-normalization
    • 02.date-normalization
    • 03.date-format-normalization
    • 04.untyped-object-normalization
    • 05.typed-object-normalization
    • 06.inherited-types-normalization
    • 07.collection-types-normalization
    • 08.object-output-normalization
  • 02.errors
    • 01.custom-type-printer
    • 02.extended-type-printer
    • 03.custom-path-printer
    • 04.custom-value-printer
  • 03.types
    • 01.type-platforms
    • 02.custom-type
    • 03.custom-type-template-arguments
    • 04.custom-platform
    • 05.custom-type-callable
    • 06.custom-type-psr-container
  • 04.mapping-readers
    • 01.reflection-mapping.php
    • 02.attribute-mapping.php
    • 03.phpdoc-mapping.php
    • 04.array-mapping.php
    • 05.php-config-mapping.php
    • 06.yaml-config-mapping.php
    • 07.neon-config-mapping.php
    • 08.inheritance.php
  • 05.mapping-providers
    • 01.default-provider.php
    • 02.in-memory-provider.php
    • 03.psr6-provider.php
    • 04.psr16-provider.php
    • 05.second-level-cache.php
    • 06.inheritance.php

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%

About

⚡ The best PHP mapper (hydrator/serializer) you've ever seen!

typelang.dev

Topics

data-mapperdenormalizerdeserializerhydratormappermarshalmarshallernormalizerserializertransformertypelangtypesunmarshal

Resources

Readme
MIT license

Code of conduct

Code of conduct
Activity
Custom properties

Stars

38 stars

Watchers

2 watching

Forks

2 forks
Report repository

Releases

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.